2

次の場合、コンパイラはブロックfoo()全体への呼び出しを最適化できますか?if

if( foo() && 0 )
    { ... }
4

3 に答える 3

2

コンパイラは、ステートメントが実行されていないfooことを意味すると判断する前に実行する必要があります。ただし、副作用のない非常に単純な関数 (グローバル状態を変更しない - C および C++ 標準には長い定義があります) の場合は、それ自体を最適化して取り除くことができます。通常、同じソースコードの一部である場合にのみ発生します。0iffoofoo

于 2013-06-25T07:40:41.250 に答える
1

同等のコード:

int x = (int) foo();
if (x)
    if  (0)
        { ... }

任意の foo に対して、最初の行を「最適化」できますか? fooのようなものかもしれません

int foo() {
    printf("x");
    return 0;
}
于 2013-06-25T07:36:54.723 に答える