我正在运行包含 g++ 的最新 cygwin。
在我看来,一个函数调用正在被优化,即使编译器标志包括 -O0。
从此循环调用该函数(示例中的所有代码都已简化):
void my_func ( void )
{
for ( int i = 0; i < 2; i++) {
var1 = table[i];
printf("i = %d\n", i);
function_to_call();
printf("Called the function\n");
}
}
它调用的函数如下:
void function_to_call()
{
int internal_var = var1;
// do some math using internal_var, passing the result
// as an input to another function
printf("var1: %d\n", internal_var);
}
运行它,输出将是:
i = 0
var1 = 0
Called the function
i = 1
Called the function
为什么会这样?我希望每次通过循环调用 function_to_call() 。这是编译器输出的摘录,直接取自标准输出:
g++ -O0 -Wall -Wno-write-stings -Wextra