Cでの演算子の評価順序
2017-06-20 (火) 23:23:54 (2473d)
VC++6.0のマニュアルを元にしています。基本的にANSI C 仕様です。
ANSI C よりも前のコンパイラでは、後置の ++ -- と typecasts が、前置の ++ -- と同じレベルです。ただし、現実には差がでることはないでしょう。
シンボル | 結合規則 |
[] () . -> ++ --(式) | 左から右 |
++ -- sizeof & * + - ~ ! (単項) | 右から左 |
typecasts (単項) | 右から左 |
* / % (二項演算) | 左から右 |
+ - (二項演算) | 左から右 |
<< >> | 左から右 |
< > <= >= | 左から右 |
== != | 左から右 |
& (ビット演算) | 左から右 |
^ | 左から右 |
| | 左から右 |
&& | 左から右 |
|| | 左から右 |
?: | 右から左 |
= *= /= %= += -= <<= >>= &= ^= |= | 右から左 |
, (順次評価) | 左から右 |
&& ||
評価は左から右に行われる。
左側オペランドで全体の評価が決定すれば、右側オペランドは評価されない。
,
順次評価され、すべてのオペランドが評価される。
関数
関数の引数は、呼び出し前に完全に評価される。ただし、その順序は保証されない。
条件演算子
最初のオペランドが最初に評価される。
初期化式、式ステートメント、while, do, for, return, if, switch のステートメント
完全に評価される。