在C / C ++中`if(CONSTANT){...}`是否已经过优化?

时间:2014-06-29 20:30:35

标签: c++ c if-statement optimization constants

现代编译器是否优化了一段代码,例如if(CONSTANT) { ... },其中CONSTANT是文字,模板参数,const变量或constexpr变量?他们是删除整个if(0) { ... }表达式还是"扔掉" if(1)中的if(1) { ... }部分?

1 个答案:

答案 0 :(得分:3)

这不能保证,但大多数高质量的编译器都会这样做。

C99理由在6.4.9中说:

if (0) {
 /* code to be excluded */
}
     

许多现代编译器都不会为此if语句生成任何代码。

例如,对于gcc(在C中),程序集转储显示即使在if (0) .. else中,if (1) .. else-O0的死代码也已优化。