【问题标题】:Compiler output code编译器输出代码
【发布时间】:2017-05-26 16:32:29
【问题描述】:

在现实世界中是否存在 C 编译器生成的目标代码的功能几乎与描述的源代码相同,但最终证明优化转向(或 可能 em>转)灾难性的?

【问题讨论】:

  • 除非编译器本身有bug,否则你得到的就是你输入的。
  • 这可能是由于编译器中的错误,或者认为不需要提示编译器的程序员缺乏知识或洞察力造成的。
  • 由于编译器中的错误,重度优化仍然会产生错误代码。重度优化还可以生成比较低优化级别更慢 或效率更低的代码。由于优化,源代码中的非常小的错误也可能会增加成大问题,尤其是在涉及未定义的行为时。

标签: c compilation compiler-optimization safety-critical


【解决方案1】:

例如:if(something || i++)。让我们假设某事是true。一个优化是跳过i++,因为or 语句已经是true。第二条语句是否实际执行取决于编译器及其配置。所以这将是我能想到的编译器优化可能导致“意外”结果的一个例子。

【讨论】:

  • 实际上,这就是我期望它做的/停止测试@成功
  • 你是对的,但是在条件谓词上使用改变变量状态的语句是不好的做法。
  • 保证短路。如果当somethingtrue 时编译器生成的代码评估i++,则它是一个损坏的编译器。
  • 您需要指定您是否在使用 C/C++,因为如果您这样做,那么您的示例就是错误的。短路是由标准保证的,因此,如果您使用的是无条件递增 i 的编译器,则您没有使用您认为正在使用的语言。
猜你喜欢
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多