正如标题所述,我想知道使用
之间有什么区别#if
DoWork();
#else
DoAnotherWork();
#endif
和
if (debug)
DoWork();
else
DoAnotherWork();
答案 0 :(得分:11)
if (debug)
DoWork();
else
DoAnotherWork();
将编译上述代码,并在运行时检查条件。
#if
DoWork();
#else
DoAnotherWork();
#endif
将在编译时检查这些语句。
所以如果#if condition为true,DoWork();将被编译,否则DoAnotherWork();将被编译。在前面的例子中,所有包含if语句的代码都将被编译。
请阅读预处理器指令
答案 1 :(得分:9)
答案 2 :(得分:6)
第一个版本使用预处理程序指令。这些是编译器本身仅编译某些语句的指令。生成的可执行文件将仅包含已编译的语句。因此,条件必须是可以在编译时进行评估的条件。
第二个版本在运行时进行评估。编译器将编译所有语句以及用于评估if
条件的逻辑。所有语句都将包含在生成的可执行文件中。实际执行的语句将在代码运行时确定。