名前空間
変種
操作

From cppreference.com
< c‎ | language

式とは、計算を指定する演算子オペランドのシーケンスです。

式の評価は、結果を生成したり(例:2 + 2の評価は4を生成)、副作用を生成したり(例:printf("%d", 4)の評価は文字'4'を標準出力ストリームに送信)、オブジェクトや関数を指定したりします。

目次

[編集] 一般

  • 値カテゴリ (lvalue, 非lvalueオブジェクト, 関数指定子) は、式の値を分類します。
  • 引数と部分式の評価順序は、中間結果が得られる順序を指定します。

[編集] 演算子

共通の演算子
代入 インクリメント
デクリメント
算術 論理 比較 メンバ
アクセス
その他

a = b
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b

a[b]
*a
&a
a->b
a.b

a(...)
a, b
(type) a
a ? b : c
sizeof


_Alignof
(C11 以降)
(C23まで)

alignof
(C23以降)

[編集] 型変換

  • オペランドの型が演算子の期待値と一致しない場合、暗黙の型変換が行われます。
  • キャストは、値をある型から別の型へ明示的に変換するために使用できます。

[編集] その他

  • 定数式はコンパイル時に評価でき、コンパイル時コンテキストで使われます(非VLA(C99以降)配列サイズ、静的初期化子など)。
  • 総称選択は、引数の型に応じて異なる式を実行できます。
(C11 以降)
  • 浮動小数点演算は、math_errhandlingで指定された例外を発生させ、エラーを報告する場合があります。
  • 標準の#pragma FENV_ACCESSFP_CONTRACTCX_LIMITED_RANGE、および浮動小数点評価精度丸め方向は、浮動小数点演算の実行方法を制御します。
(C99以降)

[編集] 一次式

任意の演算子のオペランドは、他の式であるか、または一次式である場合があります(例: 1 + 2 * 3では、演算子+のオペランドは部分式2 * 3と一次式1です)。

一次式は以下のいずれかです。

1) 定数およびリテラル(例: 2または"Hello, world"
2) 適切に宣言された識別子(例: nまたはprintf
(C11 以降)

括弧内の任意の式も一次式として分類されます。これにより、括弧があらゆる演算子よりも高い優先順位を持つことが保証されます。

[編集] 定数とリテラル

特定の型の定数値は、リテラル(lvalue式の場合)および定数(非lvalue式の場合)として知られる特殊な式を使用して、Cプログラムのソースコードに埋め込むことができます。

  • 整数定数は、整数型の10進数、8進数、または16進数です。
  • 文字定数は、文字型への変換に適したint型の個々の文字、またはchar8_t(C23以降) char16_tchar32_t、または(C11以降) wchar_t型の文字です。
  • 浮動小数点定数は、floatdouble、またはlong double型の値です。
(C23以降)
  • 文字列リテラルは、ヌル終端文字列を表すchar[]char8_t[](C23以降)char16_t[]char32_t[](C11以降)またはwchar_t[]型の文字シーケンスです。
  • 複合リテラルは、構造体、共用体、または配列型の値で、プログラムコードに直接埋め込まれます。
(C99以降)

[編集] 未評価の式

sizeof演算子のオペランドは評価されない式です (VLAでない限り)(C99以降)。したがって、size_t n = sizeof(printf("%d", 4));はコンソール出力を実行しません。

_Alignof(C23まで)alignof(C23以降)演算子のオペランド、総称選択の制御式、および_Alignof(C23まで)alignof(C23以降)のオペランドであるVLAのサイズ式も、評価されない式です。

(C11 以降)

[編集] 参照

  • C23標準 (ISO/IEC 9899:2024)
  • 6.5 式 (p: TBD)
  • 6.6 定数式 (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 6.5 式 (p: 55-75)
  • 6.6 定数式 (p: 76-77)
  • C11標準 (ISO/IEC 9899:2011)
  • 6.5 式 (p: 76-105)
  • 6.6 定数式 (p: 106-107)
  • C99標準 (ISO/IEC 9899:1999)
  • 6.5 式 (p: 67-94)
  • 6.6 定数式 (p: 95-96)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 3.3 式
  • 3.4 定数式

[編集] 関連項目

English 日本語 中文(简体) 中文(繁體)