如何关闭GCC中的所有优化
如何关闭GCC中的所有优化?使用-O0不起作用,因为它仍然优化了没有效果的语句,或者优化了无限循环后没有中断语句的任何代码。没有办法让gcc不忽略无法访问的代码和没有效果的语句 您可以做的是使用易失性变量使不可访问的代码看起来是可访问的如何关闭GCC中的所有优化,c,gcc,compiler-optimization,C,Gcc,Compiler Optimization,如何关闭GCC中的所有优化?使用-O0不起作用,因为它仍然优化了没有效果的语句,或者优化了无限循环后没有中断语句的任何代码。没有办法让gcc不忽略无法访问的代码和没有效果的语句 您可以做的是使用易失性变量使不可访问的代码看起来是可访问的 volatile bool always_true = true; if( always_true ) { //infinite loop //return something } //Useless code 在上面的示例中,gcc
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不知道它是死重代码。您必须使代码几乎不可能被编译器优化。 例如:
- 对不希望优化的变量使用
关键字volatile
- 确保代码有效,例如:不仅要更改变量值,还要打印该值或将其存储到另一个变量中,或者对该变量执行算术运算并将其存储到另一个变量中
- 引用/更改其他函数中的变量,以确保编译器无法判断该变量未在编译时使用