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