预处理器之 条件编译
在编译一个程序时,如果我们可以选择某条语句或者某组语句进行翻译或者被忽略,通常显得很方便。只用于调试程序的语句就是很明显的例子。它们不该出现在程序的产品的版本中,但是你可能不想把这些语句从源代码中物理删除,因为如果需要维护性修改时,你可能需要重新调试这个程序,还需要这些语句。
这是就用到条件编译。使用条件编译,你可以选择代码的一部分是被正常编译还是完全忽略。用于支持条件编译的基本结构是#if指令以及与其匹配的#endif指令。
#if constant-expression
statements
#endif
其中constant-expression(常量表达式)由预处理器进行求值,如果它的值是非零值(真),那么statement部分就被正常编译,否则预处理器就安静的删除它们。所谓常量表达式,就是字面值是常量或者由define定义的符号。如果变量在执行前无法获取它的值,那么出现在常量表达式就是非法的,因为编译时不可预测。
例:#if DEBUG
printf(" x=%d y=%d\n",x,y);
如果这部分需要编译,则使用 #define DEBUG 1 即可。
条件编译另一个用途是在编译时选择不同代码部分。#if指令还具有可选的#elif 和 #else ,使用方法如下:
#if constant-expression
statements
#elif constant-expression
other statements...
#else
other statements...
#endif
这里#elif出现的次数可以不限,,每个constant-expression只有当前面有所常量表达式的值都为假时才会被编译。#else也一样。