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