#2. 预处理指令
每次你在编译一个包含头文件的程序时都使用了预处理指令:
预处理器会扫描C源文件然后生成一个修改过的版本,编译器会使用这个修改后的文件编译程序。对#include
这条指令来说,预处理器会插入stdio.h文件的内容。指令总是出现在行首,以井号(#
)字符开头。除了#include
,用得最多的指令就是#define:
- #define DAYS_OF_THE_WEEK 7
- ...
- printf("一星期有%i天\n", DAYS_OF_THE_WEEK);
#define
指令创建了一个宏,预处理器会扫描整个C源文件然后把宏的名字替换为它的值。宏不是变量,因为它的值在运行时无法改变。宏在程序编译前就被替换掉了,你甚至可以创建功能类似函数的宏:
在程序编译前,预处理器会用((3) + 1)
替换ADD_ONE(3)
。
条件编译
你还可以用预处理器来实现条件编译。条件编译可以开、关部分源代码:
SPANISH
宏定义与否会改变这段代码的编译方式。