如何关闭GCC中的所有优化

时间:2013-11-27 16:53:20

标签: c gcc compiler-optimization

如何关闭GCC中的所有优化?使用-O0不起作用,因为它仍然优化了没有效果的语句,或者在没有任何break语句的无限循环之后的任何代码。

2 个答案:

答案 0 :(得分:7)

没有办法让gcc不会忽略无法访问的无法访问的代码和语句。

您可以做的是使用volatile变量使无法访问的代码可以访问。

volatile bool always_true = true;

if( always_true  )
{
     //infinite loop
     //return something
}

//Useless code

在上面的例子中,gcc不会选择无用的代码,因为它无法知道它实际上是无用的

int a = 5;
int b = 5;
volatile int c = 9;

c += 37;
return a + b;

在这个例子中,整数c不会被优化掉,因为gcc确实不知道它是自重代码。

答案 1 :(得分:2)

您必须使编译器几乎无法对代码进行优化。 例如:

  • 在您不希望优化的变量上使用volatile关键字
  • 确保代码有效,例如:不仅仅是更改变量值而且还打印值或将其存储到另一个变量或对变量进行算术运算并将其存储在另一个变量中
  • 引用/更改其他函数中的变量以确保编译器无法判断它是否在编译时未使用