#2. 预处理指令

每次你在编译一个包含头文件的程序时都使用了预处理指令:

#2. 预处理指令 - 图1

预处理器会扫描C源文件然后生成一个修改过的版本,编译器会使用这个修改后的文件编译程序。对#include这条指令来说,预处理器会插入stdio.h文件的内容。指令总是出现在行首,以井号(#)字符开头。除了#include,用得最多的指令就是#define:

  1. #define DAYS_OF_THE_WEEK 7
  2. ...
  3. printf("一星期有%i天\n", DAYS_OF_THE_WEEK);

#define指令创建了一个宏,预处理器会扫描整个C源文件然后把宏的名字替换为它的值。宏不是变量,因为它的值在运行时无法改变。宏在程序编译前就被替换掉了,你甚至可以创建功能类似函数的宏:

#2. 预处理指令 - 图2

在程序编译前,预处理器会用((3) + 1)替换ADD_ONE(3)

条件编译

你还可以用预处理器来实现条件编译。条件编译可以开、关部分源代码:

#2. 预处理指令 - 图3

SPANISH宏定义与否会改变这段代码的编译方式。