![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
たとえば以下のような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も見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
C言語での引数の省略方法
C言語・C++・C#
-
0除算して、落ちるプログラムと落ちないプログラム
C言語・C++・C#
-
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
-
4
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
5
C言語 配列の長さの上限
C言語・C++・C#
-
6
「#undef」と「#define」の使い方について
C言語・C++・C#
-
7
#defineの定数を文字列として読み込む
C言語・C++・C#
-
8
svnでファイル移動すると履歴がついてこない
その他(コンピューター・テクノロジー)
-
9
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
10
構造体のメンバをfor文で回したい
C言語・C++・C#
-
11
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
12
シグナル 6(SIGABRT)とは?
C言語・C++・C#
-
13
C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して
C言語・C++・C#
-
14
CloseとDisposeの違い
Visual Basic(VBA)
-
15
else if文の順序を変えることに意味がありますか?
Flash
-
16
【C言語】if文内の演算子の優先順位について
C言語・C++・C#
-
17
0xffffとは?
C言語・C++・C#
-
18
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
19
【C++】相互参照
C言語・C++・C#
-
20
C++ vectorに配列をプッシュしたい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
音楽の鑑賞文
-
C言語におけるif文の評価順
-
「高評価」と「好評価」の違い
-
@a.email.ne.jp ですが、届き...
-
「評価する」「評価しない」と...
-
ゲームアプリの評価は星1と星5...
-
仕返しの評価をされました。
-
人生は他人が評価するもの?
-
フリマアプリで普通評価を付け...
-
絶対評価・個人内評価とは?
-
WISC-IVの粗点から評価点への...
-
評価と批評違い教えてください ...
-
ステーキ宮はひどすぎませんか?
-
日本人の人の評価の仕方
-
400字程度のレポートを誤って53...
-
怒らない人に、どのような印象...
-
ヤフオク 落札者の評価不要の理由
-
ヤフオクの評価で、理不尽な評...
-
知恵袋のカテゴリマスターが嫌...
-
評価の偏りについて? aとeが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
音楽の鑑賞文
-
「高評価」と「好評価」の違い
-
仕返しの評価をされました。
-
C言語におけるif文の評価順
-
400字程度のレポートを誤って53...
-
人の評価で人は定義され人生が...
-
@a.email.ne.jp ですが、届き...
-
この動画(DIY冷蔵庫)は本当でし...
-
評価と批評違い教えてください ...
-
ヤフーニュースのコメントで
-
ドクターストップのかかってい...
-
知恵袋のカテゴリマスターが嫌...
-
評価の悪いユーザーからの購入...
-
フリマアプリで普通評価を付け...
-
「評価する」「評価しない」と...
-
なかなかウーバーイーツで評価...
-
WISC-IVの粗点から評価点への...
-
「正確、丁寧、迅速」に似た標...
-
ステーキ宮はひどすぎませんか?
-
京成電鉄の評価が急落しました...
おすすめ情報