预处理指令包括:文件操作,宏定义,条件编译
一.文件包含<掌握> #include< .h>
二.宏定义<熟悉>
三.条件编译<了解>
宏定义
是什么?
是一个替换代码的预处理指令
有什么用?
可以在编译之前进行代码替换.
怎么用?
开始替换:#define 被替换内容 替换成的内容
如:#define kLength 6 表示从这行开始下面所有代码中的kLength 替换成6
结束替换: #undef 被替换内容 如:#undef kLength 表示到这一行,宏定义失效.
什么时候用?
当需要用一些重复性代码或简单的函数运算时,可以用宏定义提高效率
特点
1.命名尽量以大写或小写k开头.便于区分.(规范)
2.被双引号引起来的不会被替换
3.宏定义只会做代码替换,不会关注任何逻辑,容易出现优先级错误(加括号解决).
4.替换可以设置作用域.如果不设置,作用域则是这行代码的出现到代码的最后一行
/*宏定义的用法*/
#include <stdio.h>
#define kLength 5
//宏定义函数
#define kAdd(a,b) ((a)*(b))
int add(int a,int b);
int main(){
int arr1[kLength];
int arr2[kLength];
int arr3[kLength];
printf("%d\n",kLength);
printf("%d\n",kLength+10);
//#undef kLength
// #undef kAdd(a,b)
// int kLength=10;//int 5=10;
printf("%d\n",kLength+10);
//被双引号的引起来的不会被替换
// printf("kLength\n");
int b=add(2,3);
int c=kAdd(2,3);//int c=2+3;
//宏定义只会做代码替换,不会关注任何逻辑,容易出现优先级错误(加括号解决).
int d=kAdd(2,3)/kAdd(4,5);
// int d=(2+3)/(4+5);
int f=kAdd(2+3,3+4);
//int f=(2+3)*(3+4);
printf("%d,c=%d,d=%d,f=%d\n",b,c,d,f);
// 替换可以设置作用域.如果不设置,作用域则是这行代码出现到代码的最后一行
#undef kLength
return 0;
}
int add(int a,int b){
return a+b;
}
条件编译
是什么?
是一个根据条件编译代码的预处理指令
有什么用?
可以让一段代码只在满足条件才编译,提高编译效率
怎么用?
通用: #if 条件表达式 #elif 条件表达式 #else
相关: #ifdef 宏名 表示定义了宏 #ifndef 宏名 表示没有定义宏
#endif 结束条件编译.注意一定要加.
与if 语句的区别:if语句全部编译,满足条件才执行;
#if满足条件才编译
特点:
1.条件编译不能访问需要编译后才能执行的代码.
2.条件编译不需要用大括号,所以必须加上结束标识,否则涵盖下面的所有代码
3.条件编译一般跟宏定义配合使用,防止重复包含及交叉包含