次の方法で共有


副作用

式の評価の順序は特定の実装によって言語が特定の評価の順序が保証されない場合を除いて定義されます (評価の優先順位と順序 にある)。たとえば副作用は次の関数呼び出しで実行されます :

add( i + 1, i = j + 2 );
myproc( getc(), getc() );

関数呼び出しの引数はどの順序で評価することができます。式 i + 1 は i = j + 2 の前に評価される場合があります。またi = j + 2 は i + 1 の前に評価される場合があります。結果が異なります。同様に文字が myproc に実際に渡されたを保証できません。単項インクリメントおよびデクリメント演算が代入があるためこのような操作は次の例に示すように副作用が発生することがあります :

x[i] = i++;

この例では変更する x の値は予測できません。添字の値は i の新しい動作または変更前の値であることができます。結果はコンパイラの最適化の異なるレベルで変更できます。

C に副作用が評価される順序を定義しないため上で説明した評価メソッドの両方が正しくどちらを実行するかがあります。コードの移植性をオフであることを確認するために副作用の評価の順序に依存するステートメントは避けてください。

参照

概念

式の評価 (c)