C23
From cppreference.net
<
c
ISO/IEC 9899:2024 ,亦称 C23 ,是C语言标准的现行修订版本。
- C23最新工作草案 (n3149, 2023-07-09,受密码保护的zip压缩包,参见 n3150 )。
- 最接近C23的公开草案为 首份C2Y草案 (n3220, 2024-02-22,该版本与C23仅存在编辑性差异,参见 n3221 )。
|
本节内容尚不完整
原因:最终草案已纳入已接受的修改 |
C23 将预定义宏 __STDC_VERSION__ 的值更新为 202311L 。
目录 |
新语言特性
- 十进制浮点类型 ( _Decimal32 , _Decimal64 和 _Decimal128 )
- 位精确整数 ( _BitInt )
- 二进制整型常量
-
u8字符常量 -
u8字符串字面量 的类型变更 -
数字分隔符
' - 空 初始化器 = { }
-
属性
-
[[ deprecated ]] -
[[ fallthrough ]] -
[[ maybe_unused ]] -
[[ nodiscard ]] -
[[ noreturn ]] -
[[ reproducible ]] -
[[ unsequenced ]]
-
- 函数定义 中的未命名参数
- 数组类型 与其元素类型具有相同的cv限定符
- 单参数 static_assert
- alignas 和 alignof 成为关键字(可能为兼容性保留预定义宏)
- static_assert 成为关键字(可能为兼容性保留预定义宏)
- thread_local 成为关键字(可能为兼容性保留预定义宏)
-
标签
后接声明和
} - nullptr 常量及关联的 nullptr_t 类型
- true 和 false 成为关键字(可能为兼容性保留预定义宏)
- 新的预处理器指令
-
舍入方向的杂注
-
STDCFENV_ROUND -
STDCFENV_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__ 。
新库特性
新增头文件
库功能特性
-
扩展二进制浮点数学函数
-
此章节内容不完整
原因:待确定列表项
-
-
十进制浮点数学函数
-
-
d N变体(适用于现有及新增浮点数学函数) - quantized N ()
- samequantumd N ()
- quantumd N ()
- llquantexpd N ()
- encodedecd N ()
- decodedecd N ()
- encodebind N ()
- decodebind N ()
-
-
- 浮点格式化函数
-
UTF-8 库支持
-
char8_t类型别名 - mbrtoc8()
- c8rtomb()
- atomic_char8_t 类型别名
- ATOMIC_CHAR8_T_LOCK_FREE 测试宏
-
- memset_explicit()
- POSIX 函数
-
fscanf()
和
fprintf()
函数族的扩展
-
w N和wf N长度修饰符(分别用于 [u]int N _t 和 [u]int_fast N _t ) -
H、D和DD长度修饰符(分别用于 _Decimal32 、 _Decimal64 和 _Decimal128 ) -
b转换说明符(用于无符号整数类型)
-
- timespec_getres()
- 整数类型宽度的宏常量
- 浮点类型的附加数值限制宏
- 库版本测试宏
已弃用功能
已移除功能
- 旧式 函数声明 与 函数定义
- 非二进制补码的 有符号整数 表示形式
- 允许 u / U 前缀的 字符常量 与 字符串字面量 可能不采用UTF-16/32编码
- 混合宽 字符串字面量 连接
- 支持使用零大小调用 realloc() (该行为变为未定义)
- alignas 与 alignof 作为宏定义在 <stdalign.h> 中提供(变为关键字)
- static_assert 作为宏定义在 <assert.h> 中提供(变为关键字)
- thread_local 作为宏定义在 <threads.h> 中提供(变为关键字)
已弃用功能
- <stdnoreturn.h>
- <stdalign.h>
- <stdbool.h>
- 旧特性测试宏
- _Noreturn 函数说明符
- _Noreturn 属性标记
- asctime()
- ctime()
- DECIMAL_DIG (应改用相应的类型特定宏( FLT_DECIMAL_DIG 等))
- 以下数值限制宏在 <math.h> 中的定义(应通过 <float.h> 使用)
- __bool_true_false_are_defined
缺陷报告
| 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 based) | |||||
| IEEE 754 十进制浮点类型 | N2341 |
4.2
(部分支持)*
12 |
13.0 (部分支持)* | ||||||||
[[
fallthrough
]]
|
N2408 | 10 | 9 | 是 | 6.4 | 2021.1.2 (基于clang) | |||||
u8
字符常量
|
N2418 | 10 | 15 | 6.5 | 2022.2 | ||||||
| 移除无原型的 function definitions | N2432 | 10 | 15 | 2022.2 | |||||||
[[
nodiscard
]]
带消息
|
N2448 | 11 | 10 | 是 | 6.4 | 2021.1.2 (基于clang) | |||||
| 函数定义中的未命名参数 | N2480 | 11 | 11 | 是 | 6.4 | 2021.1.2 (clang based) | |||||
| 标签 位于声明前和块末尾 | 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
(部分支持)*
14 |
6 (部分支持)* | 部分支持* | |||||||
| 数字分隔符 | 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 (部分支持)* | 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标准库相关内容 |