簡體   English   中英

沒有優化,C函數僅調用一次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM