2011-11-28 70 views
10

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

+0

关于你不想寻找编译器开关的机会,你可能希望声明你的变量(s)'volatile'。 – user786653

+0

你为什么要关闭它们?你有理由相信优化1)启用,2)导致你的问题?正确编写代码导致问题的优化很少见。但是,将-O0与-ggdb结合使用以进行调试通常很有用。 –

回答

13
gcc main.c 

g++ main.cpp 

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

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

5

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

1

使用GCC,通过在标志:-O 0

11

使用-O0是我所知道的最接近的,但是,与其他答复不同,这并不意味着零优化。你可以指望(这是gcc 4.8.2)的不同gcc的优化级别这样使优化的数量:

$ 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确实意味着零优化...

相关问题