我正在運行包含g ++的最新cygwin。沒有優化,C函數只調用一次
在我看來,一個函數調用正在被優化,即使編譯器標誌包含-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
var1定義在哪裏? –
'function_to_call'是否有返回的情況? –
優化器與否,編譯器不能省略那個函數調用(好吧,不能忽略調用printf)。我懷疑你沒有顯示的一些代碼存在問題。 – Mat