【发布时间】:2020-02-26 01:55:10
【问题描述】:
编译器如何解释 C 中的 null 语句?在执行时间方面。 (空的“;”即没有任何表达式) 如果遇到空语句,它是否会在执行期间通过删除它们来优化代码。
【问题讨论】:
-
提示:检查编译器汇编输出并找出答案。大多数编译器比您想象的要聪明得多,尤其是在启用优化的情况下。
标签: c gcc optimization
编译器如何解释 C 中的 null 语句?在执行时间方面。 (空的“;”即没有任何表达式) 如果遇到空语句,它是否会在执行期间通过删除它们来优化代码。
【问题讨论】:
标签: c gcc optimization
编译器只关心可观察的行为。是否编译
int main() {
;;;;;;;;;;;;;;;;;;
return 0;
}
或
int main() {
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
return 0;
}
对于生成的可执行文件没有任何区别。两个示例的可观察行为是相同的。
如果您想说服自己,请查看编译器输出(这是一个很棒的工具:https://godbolt.org/z/bnbxiP)或尝试分析上述示例(但不要期望得到有意义的数字;)。
我的建议是不要将代码视为与 CPU 对话的一种方式。当您编写代码时,您并没有为您的 cpu 表达指令。代码是编译器的秘诀,你的编译器比任何人都更了解如何引导 CPU。差别不大,但我认为它有帮助。
【讨论】:
/****************/ 或 /////////////////////// 之类的 cmets 来分隔程序的各个部分。我从来没有想过也可以使用;;;;;;;;;;;;;;;;;;;;;;。