C23
来自 cppreference.cn
< c
ISO/IEC 9899:2024,又名 C23,是 C 标准的当前修订版。
- C23 的最新公开 WD (n3467, 2025-02-09)。
- C23 的最新 WD (n3149, 2023-07-09, 一个受密码保护的 zip 压缩文件,请参阅 n3150)。
本节内容不完整 原因:最终草案中包含已接受的更改 |
C23 将预定义的宏 __STDC_VERSION__ 提升至 202311L。
目录 |
[编辑] 过时特性
[编辑] 已移除特性
- 旧式函数声明和定义
- 除二补码以外的有符号整数表示
- 允许 u/U 前缀的字符常量和字符串字面量可以不是 UTF-16/32
- 混合宽字符串字面量连接
- 调用 realloc() 并传入零大小的支持(行为变为未定义)
- __alignof_is_defined 和 __alignas_is_defined
- static_assert 不再作为宏在 <assert.h> 中提供(变为关键字)
- thread_local 不再作为宏在 <threads.h> 中提供(变为关键字)
[编辑] 已弃用特性
- <stdnoreturn.h>
- 旧的特性测试宏
- _Noreturn 函数说明符
- _Noreturn 属性标记
- asctime()
- ctime()
- DECIMAL_DIG(请改用适当的类型特定宏(FLT_DECIMAL_DIG 等))
- 在 <math.h> 中定义的以下数值限制宏(应通过 <float.h> 使用)
- __bool_true_false_are_defined
[编辑] 新语言特性
- 十进制浮点类型(_Decimal32、_Decimal64 和 _Decimal128)
- 位精确整数(_BitInt)
- 二进制整数常量
-
u8
字符常量 u8
字符串字面量的类型更改- 数字分隔符
'
- 空初始化器 ={}
- 属性
-
[[deprecated]]
-
[[fallthrough]]
-
[[maybe_unused]]
-
[[nodiscard]]
-
[[noreturn]]
-
[[reproducible]]
-
[[unsequenced]]
-
- 函数定义中的未命名参数
- 数组类型及其元素类型的相同 cvr 限定
- 单参数 _Static_assert
- static_assert 变为关键字(可能是出于兼容性原因的预定义宏)
- thread_local 变为关键字(可能是出于兼容性原因的预定义宏)
- 标签后跟声明和
}
- nullptr 常量和关联的 nullptr_t 类型
- true 和 false 变为关键字(可能是出于兼容性原因的预定义宏)
- 新的预处理器指令
- 用于舍入方向的 pragma
-
STDC
FENV_ROUND -
STDC
FENV_DEC_ROUND
-
[编辑] 可选特性的特性测试宏
- __STDC_IEC_60559_BFP__
- 指示支持 IEEE-754 二进制浮点运算和所需的数学函数。
- 此宏取代 __STDC_IEC_559__。
- __STDC_IEC_60559_DFP__
- 指示支持 IEEE-754 十进制浮点运算和所需的数学函数。
- __STDC_IEC_60559_COMPLEX__
- 指示支持 IEEE-754 复数运算和所需的数学函数。
- 此宏取代 __STDC_IEC_559_COMPLEX__。
[编辑] 新库特性
[编辑] 新头文件
[编辑] 库特性
- 扩展的二进制浮点数学函数
-
本节内容不完整
原因:列表待定
-
- 十进制浮点数学函数
- -
dN
现有和新的浮点数学函数的变体 - quantizedN()
- samequantumdN()
- quantumdN()
- llquantexpdN()
- encodedecdN()
- decodedecdN()
- encodebindN()
- decodebindN()
- -
- 浮点格式化函数
- UTF-8 的库支持
-
char8_t
类型别名 - mbrtoc8()
- c8rtomb()
- atomic_char8_t 类型别名
- ATOMIC_CHAR8_T_LOCK_FREE 测试宏
-
- memset_explicit()
- POSIX 函数
- fscanf() 和 fprintf() 函数族的扩展
-
wN
和wfN
长度修饰符,分别用于 [u]intN_t 和 [u]int_fastN_t -
H
、D
和DD
长度修饰符,分别用于 _Decimal32、_Decimal64 和 _Decimal128 -
b
无符号整数类型的转换说明符
-
- timespec_getres()
- 整数类型宽度的宏常量
- 浮点类型的其他数值限制宏
- 库版本测试宏
[编辑] 缺陷报告
在 C23 中修复的缺陷报告(? 个缺陷) |
---|
[编辑] 编译器支持
[编辑] C23 核心语言特性
本节内容不完整 原因:Apple Clang 和其他支持 C2x 的编译器的状态 |
C23 特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (前 PGI)* |
Nvidia nvcc |
Cray |
|
---|---|---|---|---|---|---|---|---|---|---|---|
static_assert 没有消息 | N2265 | 9 | 9 | 是 | 是 | 6.5 | 2021.1.2 (基于 clang) | ||||
[[nodiscard]]
|
N2267 | 10 | 9 | 是 | 6.4 | 2021.1.2 (基于 clang) | |||||
[[maybe_unused]]
|
N2270 | 10 | 9 | 是 | 6.4 | 2021.1.2 (基于 clang) | |||||
[[deprecated]]
|
N2334 | 10 | 9 | 是 | 6.4 | 2021.1.2 (基于 clang) | |||||
属性 | N2335 N2554 |
10 | 9 | 是 | 6.4 | 2021.1.2 (基于 clang) | |||||
IEEE 754 十进制浮点类型 | N2341 | 4.2 (partial)* 12 |
13.0 (partial)* | ||||||||
[[fallthrough]]
|
N2408 | 10 | 9 | 是 | 6.4 | 2021.1.2 (基于 clang) | |||||
u8 字符常量
|
N2418 | 10 | 15 | 6.5 | 2022.2 | ||||||
移除没有原型的函数定义 | N2432 | 10 | 15 | 2022.2 | |||||||
带有消息的 [[nodiscard]] |
N2448 | 11 | 10 | 是 | 6.4 | 2021.1.2 (基于 clang) | |||||
函数定义中的未命名参数 | N2480 | 11 | 11 | 是 | 6.4 | 2021.1.2 (基于 clang) | |||||
标签在声明和块末尾之前 | N2508 | 11 | 16 | 部分支持* | 6.5 | 17.0* | |||||
二进制整数常量 | N2549 | 4.3* 11 |
2.9* 9 |
19.0 (2015)** | 是 | 6.5 | 11.0* | ||||
预处理器条件中的 __has_c_attribute | N2553 | 11 | 9 | 是 | 6.5 | 2021.1.2 (基于 clang) | |||||
允许重复属性 | N2557 | 11 | 13 | 是 | 6.5 | 2021.4 (基于 clang | |||||
IEEE 754 交换和扩展类型 | N2601 | 7 (partial)* 14 |
6 (partial)* | 部分支持* | |||||||
数字分隔符 | N2626 | 12 | 13 | 19.0 (2015)** | 是 | 6.5 | 18.0* | ||||
#elifdef 和 #elifndef
|
N2645 | 12 | 13 | 19.40* | 13.1.6* | 6.5 | 2021.4 | ||||
u8 字符串字面量的类型更改 |
N2653 | 13 | |||||||||
用于标签的 [[maybe_unused]] |
N2662 | 11 | 16 | 6.5 | 2022.2 | ||||||
#warning | N2686 | 是 | 是 | 是 | 6.5 | 是 | |||||
位精确整数类型 (_BitInt) | N2763 | 14 (partial)* | 15 | 6.5 | 2022.2 | ||||||
[[noreturn]]
|
N2764 | 13 | 15 | 6.5 | 2022.2 | ||||||
位精确整数常量的后缀 | N2775 | 14 | 15 | 2022.2 | |||||||
预处理器条件中的 __has_include | N2799 | 5 | 是 | 19.11* | 是 | 6.5 | 18.0 | ||||
使用 Unicode 标准附件 31 的标识符语法 | N2836 | 13 | 15 | 6.5 | 2022.2 | ||||||
移除没有原型的函数声明 | N2841 | 13 | 15 | 2022.2 | |||||||
空初始化器 | N2900 | 部分支持* 13 |
部分支持* | 部分支持* | 部分支持* | 部分支持* | |||||
typeof 和 typeof_unqual | N2927 N2930 |
部分支持* 13 |
部分支持* 16 |
19.39* | 部分支持* | 部分支持* | 部分支持* | 部分支持* | |||
关键字的新拼写 | N2934 | 13 | 16 | 6.5 | |||||||
预定义的 true 和 false | N2935 | 13 | 15 | 2022.2 | |||||||
[[unsequenced]] 和 [[reproducible]] |
N2956 | 15 | |||||||||
放宽对可变参数列表的要求 | N2975 | 13 | 16 | 6.5 | 2023.1 | ||||||
对象定义中的类型推断 | N3007 | 13 | 18 | ||||||||
#embed | N3017 | 15 | 19 | ||||||||
constexpr 对象 | N3018 | 13 | 19 | ||||||||
改进的普通枚举 | N3029 | 13 | 20* | ||||||||
具有固定底层类型的枚举 | N3030 | 13 | 20* | ||||||||
__VA_OPT__
|
N3033 | 8 13 |
12 | 19.39* | 6.5 | ||||||
复合字面量的存储类说明符 | N3038 | 13 | |||||||||
nullptr | N3042 | 13 | 16 | ||||||||
C23 特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (前 PGI)* |
Nvidia nvcc |
Cray |
[编辑] C23 库特性
本节内容不完整 原因:C 标准库的不同列表 |