?
This document uses PHP Chinese website manual Release
表達式是一系列運算符及其操作數,用于指定計算。
表達式評估可能會產生一個結果(例如,2+2
產生結果的評估4
),可能會產生副作用(例如,printf("%d",4)
將字符發(fā)送'4'
到標準輸出流的評估),并可能指定對象或函數。
值類別(左值,非左值對象,函數指示符)通過它們的值對表達式進行分類
參數和子表達式的評估順序指定了獲得中間結果的順序
| Common operators |
|:----|
| assignment | incrementdecrement | arithmetic | logical | comparison | memberaccess | other |
| 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. | ab *a &a a->b a.b. | a(...) a, b (type) a ? : sizeof _Alignof (since C11). |
運算符優(yōu)先級定義了運算符綁定到它們的參數的順序
備選表述是一些運營商的備選拼寫
隱式轉換發(fā)生在操作數的類型與操作符的期望不匹配時
強制轉換可用于將值從一種類型顯式轉換為另一種類型。
可以在編譯時計算常量表達式并在編譯時上下文中使用(非 VLA 數組大小,靜態(tài)初始化器等)
通用選擇可以根據參數的類型執(zhí)行不同的表達式
浮點表達式可能會引發(fā)異常并報告 math_errhandling 中指定的錯誤
標準編譯指示FENV_ACCESS
,FP_CONTRACT
和CX_LIMITED_RANGE
以及浮點評價精度和舍入方向控制浮點表達式的執(zhí)行方式。
任何操作符的操作數可能是其他表達式,或者它們可能是主要表達式(例如,在1+2*3
,操作符的操作數是子表達式2*3
和主表達式1
)。
主要表達式有以下幾種:
1)常量和文字(例如2
或"Hello, world"
)
2)適當地聲明的標識符(例如n
或printf
)
3)通用選擇
括號中的任何表達式也被分類為主要表達式:這保證括號的優(yōu)先級高于任何運算符。
某些類型的常量值可以使用稱為文字(用于左值表達式)和常量(用于非左值表達式)的專用表達式嵌入C程序的源代碼中。
整數常量是整數類型的十進制,八進制或十六進制數字。
字符常數是int類型的單個字符適于轉換為字符類型或類型char16_t
,char32_t
(因為C11)或wchar_t
浮動常數類型的值float
,double
或long double
字符串文字的類型的字符序列char[]
,char16_t[]
,char32_t[]
,或wchar_t[]
表示空終止字符串
復合文字是直接嵌入程序代碼中的結構體,聯合體或數組類型的值
sizeof 運算符的操作數,_Alignof 運算符和一般選擇的控制表達式(自C11以來)是不被評估的表達式(除非它們是 VLA)(自C99以來)。因此,size_t
n =
sizeof(printf("%d", 4));
不執(zhí)行控制臺輸出。
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