预处理指令
- 翻译成0跟1之前执行的指令;有宏定义;条件编译;文件包含(就是include)
- 预处理指令在什么时候执行:在代码翻译成0和1之前执行;
- 预处理指令的位置是随便写的;但是是有作用域的;从编写指令的那一行代码开始,一直到文件结尾;
1.宏定义可以带参数也可以不带参数;
不带参数
- #define是宏定义的开头;所有的预处理指令都是以#开头;
- 宏定义的格式:#define 宏名 值;宏名一般写大写或者以K开头;变量名一般写小写;
- #define COUNT 6
- 表示在编译之前对代码全部过一遍;在双引号里面的COUNT不会被替换;
- #undef COUNT表示对COUNT取消,那么开始就失效,下面无法使用;
- .
带参数的宏名;
- #define sum(v1,v2) v1+v2
- 可以直接调用int c = sum(a,b);宏的作用就是把左边的东西转成右边的东西;
- 即int c= sum(a,b) =a+b;int c = sum(2,3)*sum(6,4)如果不加括号结果是24,因为int c = sum(2,3)*sum(6,4)=2+3*6+4=24;正确写法:int c =( sum(2,3))*(sum(6,4))
- 只做替换工作,不做运算;
- 一般是每个参数都有括号;而且结果值也要加上括号;
- #define pingfang(a) ((a)*(a))
- 带参数的宏定义,参数和结果值都要加小括号;
条件编译
- #if
- 条件编译,一般是判断宏的值;
- #define A 5 #if(A == 10) printf("");#elif(A=5) printf("");#else printf('");#endif return 0;
- #endif一定要写;这个作用是表示后面的代码和条件编译没有关系;表示条件编译结束;
文件包含
- <>表示系统自带的文件;“”表示自定义的文件;
- 不能循环包含;不允许你包含我,我包含你;
- 函数的定义不可以写多次;但函数的声明可以多次写;程序不会报错;
- #ifndef ABC #define ABC 54354 int sum(int a,int b); #endif
- 最好以文件名为宏名;
- 一个文件有一个宏名;可以保证每一个头文件不被执行多次;