在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) .. else
或if (1) .. else
死代码甚至在-O0
也被优化。