

たとえば以下のような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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- その他(教育・科学・学問) 質問です。教育用語で「評価計画」って何ですか?勝手な解釈として、年間指導計画の評価規準の部分のことを 1 2022/05/18 21:17
- メルカリ メルカリでHERMESのネックレスを売り、購入者から受け取り評価を貰ったのにも関わらず、偽物だから返 3 2022/12/16 11:07
- メルカリ メルカリでHERMESのネックレスを売り、購入者から受け取り評価を貰ったのにも関わらず、偽物だから返 1 2022/12/16 16:59
- ヤフオク! Q1)ヤフオクで落札直後、裁判がどうこう言ういきなり出品者の身勝手で落札者に対して失礼な自己満ルール 6 2023/08/12 10:57
- 会社経営 不当な人事評価 5 2022/07/24 11:02
- 英語 Therefore, it appears to be more logical to avoid 2 2022/07/05 15:31
- 外国株 評価損益 (ひょうかそんえき) 評価損益とは、保有資産の購入時の価格と現在の価格(時価)の差額のこと 4 2023/04/02 20:12
- その他(悩み相談・人生相談) これって普通ですか? 大学生です 授業中に英語のエッセイを書いていて 時間がないので事前準備をして行 1 2023/05/26 19:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「高評価」と「好評価」の違い
-
音楽の鑑賞文
-
400字程度のレポートを誤って53...
-
Uber Eatsを頼んで置き配で受け...
-
お仕事、ながつずきさせれば彼...
-
同じ出品者に対する2件の評価...
-
ヤフーオークションで発送方法...
-
仕返しの評価をされました。
-
自分を評価するのは他人ですか...
-
口コミサイトとしての意味があ...
-
周りの人間はやたら、自分に対...
-
ある曲線に沿って関数を評価する
-
@a.email.ne.jp ですが、届き...
-
Amazon プライムビデオにおける...
-
フリマアプリで普通評価を付け...
-
賢い人は自分を過小評価し、愚...
-
オークション終了後120日経過直...
-
平均IQが98.4と表示されている...
-
高校生筋トレ
-
WORD 98の文章校正について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一回も披露したことのない豆知識
-
「高評価」と「好評価」の違い
-
知恵袋のカテゴリマスターが嫌...
-
音楽の鑑賞文
-
評価と批評違い教えてください ...
-
C言語におけるif文の評価順
-
仕返しの評価をされました。
-
Uber Eatsを頼んで置き配で受け...
-
400字程度のレポートを誤って53...
-
職場で「こいつ、意外と根性あ...
-
Amazon プライムビデオにおける...
-
ドクターストップのかかってい...
-
@a.email.ne.jp ですが、届き...
-
フリマアプリで普通評価を付け...
-
なかなかウーバーイーツで評価...
-
「差し引く」の意味を教えてく...
-
ストイックで思慮深くて優秀な...
-
WISC-IVの粗点から評価点への...
-
「正確、丁寧、迅速」に似た標...
-
評価の悪いユーザーからの購入...
おすすめ情報