次の場合、コンパイラはブロックfoo()
全体への呼び出しを最適化できますか?if
if( foo() && 0 )
{ ... }
次の場合、コンパイラはブロックfoo()
全体への呼び出しを最適化できますか?if
if( foo() && 0 )
{ ... }
コンパイラは、ステートメントが実行されていないfoo
ことを意味すると判断する前に実行する必要があります。ただし、副作用のない非常に単純な関数 (グローバル状態を変更しない - C および C++ 標準には長い定義があります) の場合は、それ自体を最適化して取り除くことができます。通常、同じソースコードの一部である場合にのみ発生します。0
if
foo
foo
同等のコード:
int x = (int) foo();
if (x)
if (0)
{ ... }
任意の foo に対して、最初の行を「最適化」できますか? foo
のようなものかもしれません
int foo() {
printf("x");
return 0;
}