预处理器之 条件编译

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

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

  #if  constant-expression

      statements

  #endif

  其中constant-expression(常量表达式)由预处理器进行求值,如果它的值是非零值(真),那么statement部分就被正常编译,否则预处理器就安静的删除它们。所谓常量表达式,就是字面值是常量或者由define定义的符号。如果变量在执行前无法获取它的值,那么出现在常量表达式就是非法的,因为编译时不可预测。

例:#if  DEBUG

        printf(" x=%d    y=%d ",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也一样。

 

原文地址:https://www.cnblogs.com/ATMvip/p/3228188.html