0

次のようなコードが少しあるとします。

if(someInteger || somecomplexfunction() > 0) {
    // do something
}

someIntegertrue と評価された場合、関数は呼び出されますか?

ps で GCC を使用してコンパイルする-O2

4

1 に答える 1

6

いいえ、そうはなりません。C の論理演算子はショート サーキットです。そのため、an の左側||が true の場合、右側は評価されません (したがって、関数は実行されず、実行される可能性のある副作用はありません)。と同様に&&、左側が false と評価された場合、右側は評価されません。

これは C 標準で定義されており、コンパイル オプションに関係なく、標準準拠のコンパイラで発生します。

これによりパフォーマンスが向上することもありますが、これはコンパイラが選択する最適化ではなく、C のセマンティクスに根付いたものです。

于 2011-08-15T03:23:26.633 に答える