C23
< c
下一代 C 标准。
- 可公开获得的最新 C23 工作草案(n3301, 2024-07-28)。
 - 最新 C23 工作草案(n3149, 2023-07-09, 密码保护的 zip 归档文件,参见 n3150)。
 
| 本节未完成 原因:已接受但尚未包含于工作草案的更改  | 
过时
移除
- 旧式函数声明和函数定义
 - 补码以外的有符号整数表示
 - 允许 u/U 前缀的字符常量和字符串字面量可以不是 UTF-16/32
 - 混合宽字符串字面量拼接
 - 对以零大小调用 realloc() 的支持(行为变为未定义)
 - __alignof_is_defined 和 __alignas_is_defined
 - <assert.h> 中宏定义 static_assert (成为关键字)
 - <threads.h> 中宏定义 thread_local (成为关键字)
 
弃用
- <stdnoreturn.h>
 - 旧功能特性测试宏
 - _Noreturn 函数说明符
 - _Noreturn 属性标记
 - asctime()
 - ctime()
 - DECIMAL_DIG (使用合适的类型指定宏(FLT_DECIMAL_DIG等代替)
 - 下列数值界限宏在 
<math.h>中的定义(应该经由<float.h>使用它们) - __bool_true_false_are_defined
 
新的语言特性
- 十进制浮点类型(_Decimal32、 _Decimal64 及 _Decimal128)
 - 位精确整数 (_BitInt(N))
 - 二进制整数常量
 u8字符常量- 改变 
u8字符串字面量的类型 - 数位分隔符 
' - 空初始化 = {}
 - 属性
[[deprecated]][[fallthrough]][[maybe_unused]][[nodiscard]][[noreturn]][[reproducible]][[unsequenced]]
 - 函数定义中的无名形参
 - 数组类型与其元素类型的等同 cvr 限定
 - 单参数 _Static_assert
 - static_assert成为关键字 (或许出于兼容性考虑依旧是预定义宏)
 - thread_local成为关键字 (或许出于兼容性考虑依旧是预定义宏)
 - 标签后随声明和 
} - nullptr 常量和对应类型 nullptr_t
 - true 和 false 成为关键字 (或许出于兼容性考虑依旧是预定义宏)
 - 新预处理器指令
 - 舍入方向的语用
STDCFENV_ROUNDSTDCFENV_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__ 。
 
 
新的库特性
新的头文件
- <stdbit.h>
 - <stdckdint.h>
 
库特性
- 扩展的二进制浮点数学函数
- 
本节未完成 
原因:列表待完成 
 - 
 - 十进制浮点数学函数
- 既存和新浮点数学函数的 -
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() 函数族的扩展
- 分别为 [u]intN_t 与 [u]int_fastN_t 的 
wN与wfN长度修饰符 - 分别为 _Decimal32、 _Decimal64 与 _Decimal128 的 
H、D与DD长度修饰符 - 无符号整数类型的 
b转换说明符 
 - 分别为 [u]intN_t 与 [u]int_fastN_t 的 
 - timespec_getres()
 - 整数类型宽度的宏常量
 - 浮点类型的额外数值界限宏
 - 库版本测试宏
 
缺陷报告
| C23 中修正的缺陷报告(? 个缺陷) | 
|---|
编译器支持
c23 核心语言特性
| 本节未完成 原因:Apple Clang 和其他编译器对 C2x 的支持状态  | 
| C23 功能特性 | 
提案 | 
 GCC 
 | 
 Clang 
 | 
 MSVC 
 | 
 Apple Clang 
 | 
 EDG eccp 
 | 
 Intel C++ 
 | 
 IBM XL C++ 
 | 
 IBM Open XL C++ for AIX 
 | 
 IBM Open XL C++ for z/OS 
 | 
 Sun/Oracle C++ 
 | 
 Embarcadero C++ Builder 
 | 
 Cray 
 | 
 Nvidia HPC C++ (ex PGI)* 
 | 
 Nvidia nvcc 
 | 
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 无消息的 _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 (部分)* | 13.0 (部分)* | |||||||||||||
[[fallthrough]] | 
N2408 | 10 | 9 | 是 | 6.4 | 2021.1.2 (基于 clang) | ||||||||||
u8 字符常量 | 
N2418 | 10 | 15 | 6.5 | 2022.2 | |||||||||||
| 移除无原型的函数定义 | N2432 | 10 | 15 | 2022.2 | ||||||||||||
有消息 (message) 的 [[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 (部分)* | 6 (部分)* | 部分* | ||||||||||||
| 数位分隔符 | N2626 | 12 | 13 | 19.0 (2015)** | 是 | 6.5 | 18.0* | |||||||||
#elifdef 和 #elifndef | 
N2645 | 12 | 13 | 
 13.1.6*  | 
6.5 | 2021.4 | ||||||||||
u8 字符串字面量的类型修改 | 
N2653 | |||||||||||||||
标签的 [[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 | 部分* | 部分* | 部分* | 部分* | 部分* | 
 | 
|||||||||
| typeof 和 typeof_unqual | n2927 N2930  | 
部分* 13  | 
部分* 16  | 
19.39* | 部分* | 部分* | 部分* | 部分* | ||||||||
| 新的关键字拼写 | N2934 | 13 | 16 | 6.5 | ||||||||||||
预定义 true 和 false | 
N2935 | 13 | 15 | 2022.2 | ||||||||||||
[[unsequenced]] 和 [[reproducible]] | 
N2956 | |||||||||||||||
| 放宽对变长参数列表的要求 | N2975 | 13 | 16 | 6.5 | 2023.1 | |||||||||||
| 对象定义中的类型接口 | N3007 | 13 | ||||||||||||||
| #embed | N3017 | |||||||||||||||
| constexpr 对象 | N3018 | 13 | ||||||||||||||
| 改善普通枚举 | N3029 | 13 | ||||||||||||||
| 增强枚举 | N3030 | 13 | 可能 | |||||||||||||
__va_opt__ | 
N3033 | 8 | 12 | 6.5 | ||||||||||||
| 复合字面值的存储说明符 | N3038 | 13 | ||||||||||||||
| nullptr | N3042 | 13 | 16 | |||||||||||||
|   C23 功能特性  | 
  提案  | 
 GCC 
 | 
 Clang 
 | 
 MSVC 
 | 
 Apple Clang 
 | 
 EDG eccp 
 | 
 Intel C++ 
 | 
 IBM XL C++ 
 | 
 IBM Open XL C++ for AIX 
 | 
 IBM Open XL C++ for z/OS 
 | 
 Sun/Oracle C++ 
 | 
 Embarcadero C++ Builder 
 | 
 Cray 
 | 
 Nvidia HPC C++ (ex PGI)* 
 | 
 Nvidia nvcc 
 | 
c23 库特性
| 本节未完成 原因:C 标准库的差异列表  |