编译预处理和宏
1.宏定义
编译预处理指令
#开头的是编译预处理指令
它们不是C语言的成分,但是C语言程序离不开它们
#define用来定义一个宏
.c->.i 编译预处理
.i->.s 产生汇编代码文件
.s->.o 目标代码文件
.o->.out 链接等生成可执行文件
#define
#define<名字><值>
注意没有结尾的分号,因为不是C的语句
名字必须是一个单词,值可以是各种东西
在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中的名字换成值
完全的文本替换
gcc --save-temps
宏
如果一个宏的值中由其他的宏的名字,也是会被替换的
如果一个宏的值超过一行,最后一行之前的行末需要加\
宏的值后面出现的注释不会被当作宏的值的一部分
没有值的宏
#define _DEBUG
这类宏是用于条件编译的,后面有其他的编译预处理指令来检查这个宏是否已经被定义过了
预定义的宏
__LINE__ //源代码文件当前所在行号
__FILE__ //源代码文件文件名
__DATE__ //编译时的日期
__TIME__ //编译时的时间
__STDC__ //当要求程序严格遵循ANSIC标准时该标识符被赋值为1
2.带参数的宏
像函数的宏
#define cube(x) ((x)*(x)*(x))
宏可以带参数
错误定义的宏
#define