【问题标题】:Is `if(CONSTANT) { ... }` optimized in C/C++? [duplicate]`if(CONSTANT) { ... }` 是否在 C/C++ 中进行了优化? [复制]
【发布时间】:2014-08-20 05:26:02
【问题描述】:

现代编译器是否会优化像if(CONSTANT) { ... } 这样的代码,其中CONSTANT 是文字、模板参数、const 变量或constexpr 变量?他们是删除整个if(0) { ... } 表达式还是“丢弃”if(1) { ... } 中的if(1) 部分?

【问题讨论】:

  • 使用if(constant) 检查程序集输出并检查没有它的输出。据我所知,如果 CONSTANT 确实是一个常量,很多编译器会在优化级别设置得足够高的情况下进行这种类型的优化。
  • 成为const 变量并不一定意味着编译器知道该值。
  • @quetzalcoatl 谢谢。接受的 answer 很有帮助。但请注意,该问题中唯一的“问题部分”是“编译器如何优化声明为 const 的方法与未声明的方法”。我看不出我的问题如何与那个问题重复。
  • cubuspl42 - 我同意这不是最好的“重复”参考,但仍然比more-of-a-duplicate 有用得多。奇怪的是,我找不到更好的(不过,我知道它们存在,这个问题很常见),所以我链接了提供最有用信息的那个。

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


【解决方案1】:

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

C99 基本原理在 6.4.9 中说:

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

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

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

【讨论】:

  • @quetzalcoatl 我终于删除了引用的#if 0 部分,以免让读者感到困惑。
  • 对不起,我不是故意推你的工作,我只是给随机读者留了个便条。但是非常感谢!现在这更加清晰和信息丰富!
猜你喜欢
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多