现代编译器是否优化了一段代码,例如if(CONSTANT) { ... }
,其中CONSTANT
是文字,模板参数,const
变量或constexpr
变量?他们是删除整个if(0) { ... }
表达式还是"扔掉" if(1)
中的if(1) { ... }
部分?
答案 0 :(得分:3)
这不能保证,但大多数高质量的编译器都会这样做。
C99理由在6.4.9中说:
if (0) { /* code to be excluded */ }
许多现代编译器都不会为此if语句生成任何代码。
例如,对于gcc
(在C中),程序集转储显示即使在if (0) .. else
中,if (1) .. else
或-O0
的死代码也已优化。