

たとえば以下のようなif文で、A B C が評価される順番は
言語の規約上、明確になっているのでしょうか?
if ( A && B && C ) { }
また例えば A, B, C の順番に評価されるとして、B が
FALSE の場合は C を評価する必要はありませんが、
この場合、Cは評価されないことは言語規約上、明確に
なっているのでしょうか?
手元のコンパイラで試した結果では
評価順は A -> B -> C
で B で FALSE を返すようにしたら C は実行されませんでした。
ただ、これが実装依存か、言語の標準仕様かという点が
気になっています。
No.1ベストアンサー
- 回答日時:
「A,B,Cの順に評価され、AがFALSEならB,Cは評価されず、AがTRUEでBがFALSEならCは評価されない」が標準仕様です。
論理AND演算子、論理OR演算子は左から右に評価され、第1オペランドだけで値が決定すると、第2オペランドの評価は行われません。
http://www.microsoft.com/japan/developer/library …
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide2 …
http://www.st.rim.or.jp/~phinloda/cqa/cqa10.html …
No.6
- 回答日時:
オペランドの評価順序が決まっている演算子は
&&, || (第1オペランド→第2オペランドの順で, 第1オペランドで値が決まるなら第2オペランドは評価しない) と
?: (第1オペランド→第2オペランドまたは第3オペランドの順)
だけで, 逆にこれら以外は(最適化とは無関係に)不定となっています.
No.5
- 回答日時:
ちょっと気になったので投稿させていただきます。
> 順序をかえる場合があります。
確かに、意味が変わらない範囲内で「内部的には」実は評価の順序が変わっている、というのは今回の件に限らず最適化では普通にあることですが、
今回の話は、No.1~No.3の方の答えられたような順序で評価をしているように「外部からは」見えるという話であって、最適化による評価順序の変更とは切り分けたほうがよいように思います。
No.4
- 回答日時:
みなさんは、a,b,cの順に評価するとかかれていますが
実は、昔、古いコンパイラ等では、強力な最適化を
実現するために、同じ結果になることが確定された
場合、順序をかえる場合があります。
例えば・・・・Z80 (16bitレジスタが3つ)を例にします。
unsigned a,b,c; /* unsigned int */
a=23513;
if(a > 20000) {
b=15325;
if(b>10000) {
c=31252;
if (a && b && c) {
のような場合、実はレジスタ上に残っている数字は
b と c と 比較用の 10000 だけになります。
そうすると、最適化する上で、最初に b と c を
最初に比較することで、メモリからの読み出しの分
最適化することができます。
No.3
- 回答日時:
#1の方が回答されている通り、「A,B,Cの順に評価され、Aが偽ならB,Cは評価されず、Aが真でBが偽ならCは評価されない」のが標準仕様です。
通常、演算子のオペランドの評価順序は(演算子の優先順位とは関係なく)不定ですが、&&や||演算子等は例外的に評価順序が決められています。
厳密に言えば、||や&&演算では、第一オペランドの評価の直後が副作用完了点となっています。以後、詳しく調べたい場合は「副作用完了点」で調べてみてください。
なお、C++で&&や||演算子を多重定義した場合には、こうした動作にはなりませんので要注意です。
No.2
- 回答日時:
>たとえば以下のようなif文で、A B C が評価される順番は
>言語の規約上、明確になっているのでしょうか?
はい。「==」、「&&」などは演算子と呼ばれ、
優先順位が決められています。
慣れてくれば演算子の優先順位もある程度わかって
きますが、全部覚える必要はないでしょう。
()で優先順位を明確にするのも一つの手です。
http://www.bohyoh.com/CandCPP/C/operator.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「高評価」と「好評価」の違い
-
400字程度のレポートを誤って53...
-
音楽の鑑賞文
-
知恵袋のカテゴリマスターが嫌...
-
ネットショッピングの信頼性
-
仕返しの評価をされました。
-
世界一貧しい大統領は本当に大...
-
個人評価だけで月給4万違う会社...
-
ジモティー
-
職場で「こいつ、意外と根性あ...
-
Amazon プライムビデオにおける...
-
世の中の綺麗な部分以外受け入...
-
一回も披露したことのない豆知識
-
ヤフオクで評価されたのですが...
-
Uber Eatsを頼んで置き配で受け...
-
ヤフオクで落札価格が気に入ら...
-
支払期限が過ぎたのですが、落...
-
自分の出品を別アカで自己落札...
-
ヤフオクの自動入札って何です...
-
ヤフオクで落札者が荷物を受け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「高評価」と「好評価」の違い
-
ネットショッピングの信頼性
-
ジモティー
-
400字程度のレポートを誤って53...
-
音楽の鑑賞文
-
世界一貧しい大統領は本当に大...
-
個人評価だけで月給4万違う会社...
-
Amazon プライムビデオにおける...
-
知恵袋のカテゴリマスターが嫌...
-
C言語におけるif文の評価順
-
評価と批評違い教えてください ...
-
Uber Eatsを頼んで置き配で受け...
-
フリマアプリで普通評価を付け...
-
職場で「こいつ、意外と根性あ...
-
ドクターストップのかかってい...
-
@a.email.ne.jp ですが、届き...
-
一回も披露したことのない豆知識
-
仕返しの評価をされました。
-
「差し引く」の意味を教えてく...
-
教えてgooの評価?をapp store...
おすすめ情報