预定义符号
? 由官方定义,一般是字符串常量或者是十进制数字常量。
符号 | 样例值 | 含义 |
---|
_FILE_ | “name” | 进行编译的源文件 | _LINE_ | 25 | 文件当前的行号 | _DATA_ | “Jan 31 1997” | 文件被编译的日期 | _TIME_ | “18:04:30” | 文件被编译的时间 | _STDC_ | 1 | 如果编译器遵循ANSIC,其值为1,否则未定义 |
#define
宏
定义
- #define允许把参数替换到文本中,这种实现通常称未宏或者定义宏((defined maccro)
- ? !!!所有用于对数值表达式进行求值的宏定义都应该用括号把参数括起来,同时对整个宏定义也需要用括号括起来
define替换
宏与函数
宏的执行速度更快,但是如果宏很长,插入代码,代码就会变得更长。
宏的参数每次用于宏定义时,他们都将重新求职,由于多次求职,具有副作用的参数(例如i++)可能会产生不可预料的后果
宏与类型无关,只要对参数的操作时合法的,它可以使用于任何参数类型。
#undef
预处理指令用于移除一个宏定义
条件编译
#elif 可以布线次数出现。
文件包含
“”与<>,前者用于自定义,后者标准库,“”会先去当前目录下寻找包含文件,如果没有,再去编译器默认的头文件路径寻找头文件。
标准要求编译器必须支持至少8层的头文件嵌套
其他指令
#reeor 允许你生成错误信息
#progma指令是另外一种机制,因编译器而异
#(无效指令)可以用来占位置
|