[1568] Re:IF文の判定について
投稿者:(ぱ)こと管理人
2010/06/10 00:46:38
>if((func_hoge() == 真) && (func_piyo() == 真)) // (1)
> 実行文;
>
>if(func_hoge() == 真)
> if(func_piyo() == 真) // (2)
> 実行文;
>
>上記(1)または(2)において、func_hoge()が偽であった場合、
>func_piyo が実行されないことは文法上保証されるのでしょうか?
どちらについても保証されています。
(1)は短絡演算子というやつで、JIS X 3010:2003 (ISO/IEC 9899:1999)であれば
6.1.13に以下の記述があります。
| ビット単位の2項&演算子と異なり,&&演算子は左から右への評価を保証する。
| 第1 オペランドの評価の直後を副作用完了点とする。第1オペランドの値が0と
| 比較して等しい場合,第2オペランドは評価しない。
「||」も同様です(6.5.14 論理OR演算子より)
| ビット単位の|演算子と異なり,||演算子は左から右への評価を保証する。
| 第1オペランドの評価の直後を副作用完了点とする。第1オペランドの値が0と
| 比較して等しくない場合,第2 オペランドは評価しない。
(2)はさすがにif文の動作として自明ではないでしょうか。