[英]With no optimization, C function only called once
我正在運行包含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()。 這是編譯器輸出的摘錄,直接從stdout中獲取:
g++ -O0 -Wall -Wno-write-stings -Wextra
首先,您發布的內容只是圖片的“一部分”,因為function_to_call()
輸出var1: ...
而示例輸出為var1 = ...
不過,如果我不得不對這個問題a之以鼻……
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);
}
我猜想“做一些數學……”部分將迫使人們早日返回。 但是,僅當輸入(可能作為var1
的全局變量傳遞)設置為特定值時。
你們是對的,我發布了一個不完整的代碼示例。 該函數實際上沒有任何return語句,但是我找到了罪魁禍首。 function_to_call()中的代碼在狀態機中。 發生的情況是狀態在該代碼完成之前已更改,因此下一次進入該狀態時將出現另一種情況。 我向所有人道歉,並從中學到了教訓。 感謝您的努力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.