如何在GCC中关闭所有优化?使用-O0并不能达到目的,因为它仍会优化掉没有效果或任何代码之后没有break语句的无限循环的语句。
无法使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;
gcc -O0
,只要不使用 const
,就不需要使用 volatile
。所有非 const
变量都被认为在 C 语句之间可能会改变值,这就是 为什么编译器在 -O0
"调试构建" 中不会跨语句保留寄存器中的值(与 volatile
很相似)。因此,if (variable)
永远不会是死代码,但 if (0)
或 if (const)
在 -O0
下则是死代码。 - Peter Cordes您需要使代码几乎不可能被编译器优化。
volatile
关键字