【问题标题】:How to compile C program without any optimization如何在不进行任何优化的情况下编译 C 程序
【发布时间】:2011-11-28 17:16:48
【问题描述】:

如何在不使用 gcc/g++ 进行任何优化的情况下编译 C 程序?

【问题讨论】:

  • 如果您不是在寻找编译器开关,您可能希望声明您的变量volatile
  • 为什么要关闭它们?您是否有理由相信优化是 1) 启用的,以及 2) 给您带来问题?优化很少会导致正确编写的代码出现问题。但是,结合使用 -O0 和 -ggdb 进行调试通常很有用。

标签: c gcc


【解决方案1】:

使用 -O0 是我所知道的最接近的,但是,与其他回复不同,这并不意味着零优化。您可以像这样计算不同 gcc 优化级别的启用优化次数(这是 gcc 4.8.2):

$ gcc -Q -O0 --help=optimizers | grep enabled | wc -l
52
$ gcc -Q -O1 --help=optimizers | grep enabled | wc -l
80
$ gcc -Q -O2 --help=optimizers | grep enabled | wc -l
110
$ gcc -Q -O3 --help=optimizers | grep enabled | wc -l
119

所以在 -O0 处,启用了 52 种优化。我想可以一个一个地禁用它们,但我从未见过这样做。

请注意 gcc 手册页说:

-O0 Reduce compilation time and make debugging produce the expected results.  This is the default.

这不是零优化的承诺。

我不是 gcc 开发人员,但我猜他们会说 -O0 优化已经变得如此标准,以至于它们几乎不能再被称为优化,而是“标准”。如果这是真的,那就有点令人困惑了,因为 gcc 仍然在优化器列表中。我也不太了解历史:也许对于以前的版本 -O0 确实意味着零优化......

【讨论】:

  • 非常有用的评论,不知道 - 我在 CS 学习的第 5 年,从一开始我所有的老师都告诉我们-O0 意味着没有优化。
【解决方案2】:
gcc main.c

g++ main.cpp

默认情况下它不做任何优化。只有当您指定-O1, -O2, -O3, etc... 时,它才会进行优化。

或者您可以使用-O0 开关使其明确。

【讨论】:

【解决方案3】:

除非您通过-O 标志请求它们,否则您不应该得到任何优化。如果您需要撤消构建系统提供的某些默认值,-O0 会为您执行此操作,只要它是命令行中的最后一个 -O 标志。

【讨论】:

    【解决方案4】:

    使用 gcc,传入标志:-O 0。

    【讨论】:

      【解决方案5】:

      使用编译器开关-O0

      【讨论】:

        猜你喜欢
        • 2020-12-10
        • 1970-01-01
        • 2016-03-07
        • 2010-11-02
        • 2011-03-21
        • 2011-05-02
        • 2013-05-11
        • 2013-10-14
        • 1970-01-01
        相关资源
        最近更新 更多