码迷,mamicode.com
首页 > 其他好文 > 详细

十二、预处理

时间:2019-11-05 22:05:53      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:文件内容   文本   isp   字节   替换   Once   包含   本质   写法   

预处理命令
三个主要的组成
1.宏定义替换
2.头文件包含
3.条件编译


主要 多文件的写法

代码--->编译--->可执行文件(exe)
编译之前的预处理阶段(删掉注释 宏定义 包含头文件 条件编译)

1.宏定义 作用 替换文本
#define 定义一个宏
#define 宏名 要替换的内容
一般宏后面不写分号
宏 直接替换 可以是任意内容


带参宏 类似函数
#define ADD(a,b) a+b
将ADD替换成a+b的形式 本质上是对文本操作
printf("%d\n",ADD(3,4));
只适用简单的操作(里面不能有循环和递归)
直接替换
好处 函数 调用函数(需要跳转时间) 简单的函数用宏替换 不需要跳转时间
没有参数类型限制 比函数灵活

printf("ADD(3,4)=%d\n",ADD(3,4)*5);//3+4*5
先替换然后计算 需要注意优先级问题

2.头文件包含
#include<头文件名字>
#include"头文件名字"
头文件 把头文件内容 直接复制到代码前面

< > 一般包含自带的头文件 stdio.h 到指定目录查找
" " 一般自己写的头文件 到项目文件夹中找 然后找系统指定目录(系统头文件所在目录)

函数
void fun()定义
{printf("helloworld")}
函数定义放在.h中 函数申明放在.c中

3.条件编译 根据某些条件 判断下面的语句是否编译

#if

#endif

#ifndef if not define 判断宏是否定义过 如果没有定义过 后面的语句就会被定义 否则就不会被定义
条件为真 后面都会被定义 调教为假 后面都不会被定义
#endif

#define

在头文件里面设置一个宏 如果包含过 就定义一下这个宏
判断这个红有没有定义过 如果有 说明之前包含过


多字节字符集 Unicode 字符集
处理方式也是不一样的
判断使用哪一种字符集
然后写出对应的函数

函数定义

技术图片
1 void fun();
2 void insist();
insist.h

函数申明

技术图片
1 #include <stdio.h>
2 #include "insist.h"
3 void fun()
4 {
5     printf("helloworld\n");
6 }
7 void insist(){
8     printf("insist niubi\n");
9 }
insist.c

主函数

 1 #pragma once//防止头文件重复包含  包含头文件  ---->复制头文件内容
 2 //防止重复包含
 3 #include <stdio.h>
 4 #include "insist.h"
 5 #define 主函数 int main()
 6 #define ROW 20
 7 #define ADD(a,b) a+b 
 8 #define HELLO "helloworld"
 9 #define M(a) a>=0?a:a<=10?-a:0
10 #define POW(a,b) (a*b)
11 //上面已经定义过了ROW 所以后面就不会定义了
12 #ifndef ROW
13 #define ADD(a,b) a+b 
14 #define HELLO "helloworld"
15 #define M(a) a>=0?a:a<=10?-a:0
16 #define POW(a,b) (a*b)
17 #endif
18 主函数
19 {
20     insist();
21     fun();
22     printf("%d\n",ADD(3,4));
23     printf("ADD(3,4)=%d\n",ADD(3,4)*5);//3+4*5需要注意优先级问题
24     printf("%d\n",M(3));//返回3
25     printf("%d\n",POW(3+4,4+5));//3+4*4+5=3+16+5=24;
26         printf("%s\n",HELLO);
27 #if 0//直接注释
28     int i;
29     printf("%d\n",ADD(3,4));
30     printf("ADD(3,4)=%d\n",ADD(3,4)*5);//3+4*5需要注意优先级问题
31     printf("%d\n",M(3));//返回3
32     printf("%d\n",POW(3+4,4+5));//3+4*4+5=3+16+5=24;
33     for (i=0;i<ROW;i++)
34     {
35         printf("%s\n",HELLO);
36     }
37 #endif
38     getchar();
39     return 0;
40 
41 }

 

 

十二、预处理

标签:文件内容   文本   isp   字节   替换   Once   包含   本质   写法   

原文地址:https://www.cnblogs.com/liugangjiayou/p/11801635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!