0
"!!!"次のコードの実行が実行されます。コンパイラが最適化されている場合:コンパイラ最適化を使用したときの狂った動作
int test()
{
volatile uint32_t flag = 0; /* volatile doesnt matter */
flag = 3;
if (flag == 0)
{
return 0; // !!!
}
else
{
return 1;
}
}
コンパイラ:IARスタジオCコンパイラ;プラットフォーム:SAM4Cマイクロコントローラ。中レベルの最適化
もちろん、これは既に元の問題が煮詰まったコードです。私は...コンパイラはここでやっていること一方
を理解することはできません
、これは期待通りに動作します:
int test()
{
volatile uint32_t flag = 0; /* volatile doesnt matter */
int result = 0;
flag = 3;
if (flag == 0)
{
result = 0;
}
else
{
result = 1; // !!!
}
return result;
}
謎のように見えますが、asmに手がかりがありますか? – harold