当编译一个程序时,如果我们选择某条语句或某组语句进行翻译或者被忽略,常常会显得很方便。只用于调试程序的语句就是一个明显的例子。它们不应该出现在程序的产品版本中,但是你可能并不想把这些语句从源代码中物理删除,因为如果需要一些维护性修改时,你可能需要重新调试这个程序,还需要这些语句。

条件编译(conditional compilation)就是用于实现这个目的。使用条件编译,你可以选择代码的一部分是被正常编译还是完全忽略。用于支持条件编译的基本结构是 #if 指令和与其匹配的 #endif 指令。

下面显示了它最简单的语法形式。

#if constant-expression
    statements
#endif

其中, constant-expression(常量表达式)由预处理器进行求值。如果它的值是非零值(真),那么 statements 部分就被正常编译,否则预处理器就会安静地删除它们。

所谓常量表达式,就是它或者是字面值常量(数),或者是一个有#define 定义的符号常量。如果变量在执行期之前无法获得它们的值,那么它们如果出现在常量表达式中就是非法的,因为它们的值在编译时是不可预测的。

条件编译的另一个用途就是编译时选择不同的代码部分。

#if constant-expression
    statements
#elif constant-expression
    other statements...
#else
    other statements...
#endif

#elif子句出现的次数可以不限。