【问题标题】:Null statement execution time in CC中的空语句执行时间
【发布时间】:2020-02-26 01:55:10
【问题描述】:

编译器如何解释 C 中的 null 语句?在执行时间方面。 (空的“;”即没有任何表达式) 如果遇到空语句,它是否会在执行期间通过删除它们来优化代码。

【问题讨论】:

  • 提示:检查编译器汇编输出并找出答案。大多数编译器比您想象的要聪明得多,尤其是在启用优化的情况下。

标签: c gcc optimization


【解决方案1】:

编译器只关心可观察的行为。是否编译

int main() {
   ;;;;;;;;;;;;;;;;;;
   return 0;
}

int main() {
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    return 0;
}

对于生成的可执行文件没有任何区别。两个示例的可观察行为是相同的。

如果您想说服自己,请查看编译器输出(这是一个很棒的工具:https://godbolt.org/z/bnbxiP)或尝试分析上述示例(但不要期望得到有意义的数字;)。

我的建议是不要将代码视为与 CPU 对话的一种方式。当您编写代码时,您并没有为您的 cpu 表达指令。代码是编译器的秘诀,你的编译器比任何人都更了解如何引导 CPU。差别不大,但我认为它有帮助。

【讨论】:

  • 人们经常使用 /****************//////////////////////// 之类的 cmets 来分隔程序的各个部分。我从来没有想过也可以使用;;;;;;;;;;;;;;;;;;;;;;
  • @SteveSummit 它实际上比 ///// 或类似的 cmets 好得多,因为编译器会忽略 cmets 但会检测代码中的拼写错误:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多