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

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

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

C99理由在6.4.9中说:

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

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

例如,使用gcc (在C中),程序集转储显示带有if (0) .. elseif (1) .. else死代码甚至在-O0也被优化。