表达式
表达式求值可能会产生结果(例如,2 + 2 的求值产生结果 4),可能会产生副作用(例如,printf("%d", 4) 的求值将字符 '4' 发送到标准输出流),并且可能会指定对象或函数。
目录 |
[编辑] 概述
[编辑] 运算符
常见运算符 | ||||||
---|---|---|---|---|---|---|
赋值 | 递增 递减 |
算术 | 逻辑 | 比较 | 成员 访问 |
其他 |
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
[编辑] 转换
[编辑] 其他
- 常量表达式可以在编译时求值,并在编译时上下文中使用(非变长数组(C99 起)数组大小、静态初始化器等)
|
(C11 起) |
|
(C99 起) |
[编辑] 主表达式
任何运算符的操作数可以是其他表达式,也可以是主表达式(例如,在 1 + 2 * 3 中,运算符 + 的操作数是子表达式 2 * 3 和主表达式 1)。
主表达式可以是以下任何一种:
3) 泛型选择
|
(C11 起) |
任何加括号的表达式也被归类为主表达式:这保证了括号比任何运算符具有更高的优先级。
[编辑] 常量与字面量
某些类型的常量值可以使用称为字面量(对于左值表达式)和常量(对于非左值表达式)的专门表达式嵌入 C 程序的源代码中
- 整型常量是整型的十进制、八进制或十六进制数字。
- 字符常量是 int 类型的单个字符,适用于转换为字符类型,或是 char8_t、(C23 起) char16_t、char32_t 或(C11 起) wchar_t 类型。
- 浮点常量是 float、double 或 long double 类型的值。
|
(自 C23 起) |
- 字符串字面量是 char[]、char8_t[](C23 起)、char16_t[]、char32_t[] 或(C11 起) wchar_t[] 类型的字符序列,表示以 null 结尾的字符串。
|
(C99 起) |
[编辑] 未求值表达式
sizeof 运算符的操作数是未求值的表达式(除非它们是变长数组)(C99 起)。因此,size_t n = sizeof(printf("%d", 4)); 不会执行控制台输出。
|
(C11 起) |
[编辑] 引用
- C23 标准 (ISO/IEC 9899:2024)
- 6.5 表达式 (p: 待定)
- 6.6 常量表达式 (p: 待定)
- 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 常量表达式
[编辑] 参阅
C++ 文档关于表达式
|