编译预处理指令
1.以#开头都是编译预处理指令
2.#define定义一个宏
#define
1.#define 名字 值 (注意末尾无“;”)
2.名字必须是一个单词,值可以使各种东西
3.c语言编译程序开始之前,编译预处理程序(cpp)会将名字换成值
(完全的文本替换)
宏
1.一个宏的值中有其他宏的名字也会被替换
2.宏的值超过一行,最后一行之前每一行的行末要加\
3.可以注释宏
没有值的宏
#define __DEBUG
用于条件编译
预定义的宏
ANSIC标准定义了以下6种可供C语言使用的预定义宏:
__LINE__ 在源代码中插入当前源代码行号
__FILE__ 在源代码中插入当前源代码文件名
__DATE__ 在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕
__TIME__ 在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕
__STDC__ 当要求程序严格遵循ANSIC标准时该标识符被赋值为1。
__cplusplus
标识符__LINE__和__FILE__通常用来调试程序;
标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本;
当要求程序严格遵循ANSIC标准时,标识符__STDC__就会被赋值为1;
当用C++编译程序编译时,标识符__cplusplus就会被定义。
带参数的宏
1.一切都要有括号,值要有括号,参数要有括号
2.可带多个参数,也可组合嵌套其他宏
3.宏没有类型检查,部分宏会被inline函数取代
#define asd(x) ((x)*123)
#define MIN(a,b) ((a)>(b)?(a):(b))