式
式は計算内容を指定する演算子とその被演算子の並びです。
式は結果を生成したり (例えば 2+2 を評価すると結果 4 が生成されます)、副作用を生成したり (例えば x++ は変数 x の値を1増やします)、オブジェクトや関数を指定したりします。
一般
演算子
| 一般的な演算子 | ||||||
|---|---|---|---|---|---|---|
| 代入 | インクリメント デクリメント |
算術 | 論理 | 比較 | メンバアクセス | その他 |
|
|
|
|
|
|
|
|
変換
その他
- 定数式はコンパイル時に評価可能でコンパイル時の文脈で使われます (VLAでない配列のサイズ、静的初期化など)
- 総称選択を使うと引数の型に応じて異なる式を実行できます
- 浮動小数点式は math_errhandling で指定されるように例外を発生したりエラーを報告する場合があります
- 標準の #pragma である
FENV_ACCESS,FP_CONTRACT,CX_LIMITED_RANGEおよび浮動小数点の評価精度や丸め方向によって浮動小数点式の実行方法が制御されます。
一次式
任意の演算子の被演算子は他の式または一次式です (例えば 1+2*3 の場合、+演算子の被演算子は一次式 1 と部分式 2*3 です)。
一次式は以下のいずれかです。
2, "Hello, world")括弧で囲まれた任意の式もまた一次式に分類されます。 これにより括弧が他のいかなる演算子よりも高い優先順位を持つことが保証されます。
定数とリテラル
一部の型の定数値はリテラル (左辺値の式の場合) や定数 (左辺値でない式の場合) と呼ばれる特別な式を使って C のプログラムのソースコード中に埋め込むことができます。
- 整数定数は整数型の10進数、8進数または16進数の数値です
- 文字定数は文字型、
char16_t型、char32_t型 (C11以上)またはwchar_t型に変換するのに適した int 型の個々の文字です - 浮動小数点定数は
float,doubleまたはlong double型の値です - 文字列リテラルはヌル終端文字列を表す
char[]型、char16_t[]型、char32_t[]型 (C11以上) またはwchar_t[]型の文字の並びです - 複合リテラルはプログラムコードに埋め込まれた構造体、共用体または配列型の値です
未評価式
sizeof 演算子の被演算子、_Alignof 演算子の被演算子および総称選択の制御式 (C11以上)は評価されない式です(VLAの場合を除きます) (C99以上)。 例えば、size_t n = sizeof(printf("%d", 4)); はコンソール出力を行いません。
参考文献
- C11 standard (ISO/IEC 9899:2011):
- 6.5 Expressions (p: 76-105)
- 6.6 Constant expressions (p: 106-107)
- C99 standard (ISO/IEC 9899:1999):
- 6.5 Expressions (p: 67-94)
- 6.6 Constant expressions (p: 95-96)
- C89/C90 standard (ISO/IEC 9899:1990):
- 3.3 EXPRESSIONS
- 3.4 CONSTANT EXPRESSIONS
関連項目
式 の C++リファレンス
|