C23
来自cppreference.com
< c
下一代 C 标准。
参见:当前的 C23 国际标准日程。
本节未完成 原因:已接受但尚未包含于工作草案的更改 |
过时
移除
- 旧式函数声明 和函数定义
- 补码以外的有符号整数表示
- 许可,u/U前缀 字符常量 和 字符串字面量 或许不是UTL-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
字符常量 - 数位分隔符
'
- 空初始化 = {}
- 属性
-
[[deprecated]]
-
[[fallthrough]]
-
[[maybe_unused]]
-
[[nodiscard]]
-
[[noreturn]]
-
[[reproducible]]
-
[[unsequenced]]
-
- 函数定义中的无名形参
- 数组类型与其元素类型的等同 cvr 限定
- 单参数 _Static_assert
- static_assert成为关键字 (或许出于兼容性考虑依旧是预定义宏)
- thread_local成为关键字 (或许出于兼容性考虑依旧是预定义宏)
- 标签后随声明和
}
- nullptr 常量和对应类型 nullptr_t
- true和false成为关键字 (或许出于兼容性考虑依旧是预定义宏)
- 新预处理器指令
- 舍入方向的语用
-
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__ 。
新的库特性
新的头文件
-
<stdbit.h>
-
<stdckdint.h>
库特性
- 扩展的二进制浮点数学函数
-
本节未完成
原因:列表待完成
-
- 十进制浮点数学函数
- 既存和新浮点数学函数的 -
dN
变体 - quantizedN()
- samequantumdN()
- quantumdN()
- llquantexpdN()
- encodedecdN()
- decodedecdN()
- encodebindN()
- decodebindN()
- 既存和新浮点数学函数的 -
- 浮点格式化函数
- 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 核心语言特性
本节未完成 原因:status for apple clang and other compilers supporting c2x |
C23 功能特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XLC++ |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ (前 Portland Group/PGI) |
Nvidia nvcc |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
单参数 _static_assert | N2265 | 9 | 9 | 是 | 是 | 6.5 | 2021.1.2 (clang based) | |||||||
[[nodiscard]]
|
N2267 | 10 | 9 | 是 | 6.4 | 2021.1.2 (clang based) | ||||||||
[[maybe_unused]]
|
N2270 | 10 | 9 | 是 | 6.4 | 2021.1.2 (clang based) | ||||||||
[[deprecated]]
|
N2334 | 10 | 9 | 是 | 6.4 | 2021.1.2 (clang based) | ||||||||
属性 | N2335 N2554 |
10 | 9 | 是 | 6.4 | 2021.1.2 (clang based) | ||||||||
ieee 754 十进制浮点类型 | N2341 | 4.2 (partial)* | 13.0 (partial)* | |||||||||||
[[fallthrough]]
|
N2408 | 10 | 9 | 是 | 6.4 | 2021.1.2 (clang based) | ||||||||
u8 字符常量
|
N2418 | 10 | 15 | 6.5 | 2022.2 | |||||||||
移除无原型的函数定义 | N2432 | 10 | 15 | 2022.2 | ||||||||||
有消息(message)的[[nodiscard]]
|
N2448 | 11 | 10 | 是 | 6.4 | 2021.1.2 (clang based) | ||||||||
函数定义中的匿名参数 | N2480 | 11 | 11 | 是 | 6.4 | 2021.1.2 (clang based) | ||||||||
声明和语句块结束前的标签 | N2508 | 11 | 16 | partial* | 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 based) | ||||||||
允许重复属性 | N2557 | 11 | 13 | 是 | 6.5 | 2021.4 (clang-based | ||||||||
ieee 754 交换和扩展类型 | N2601 | 7 (partial)* | 6 (partial)* | partial* | ||||||||||
数位分隔符 | 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 | 15 | 6.5 | 2022.2 | ||||||||||
[[noreturn]]
|
N2764 | 13 | 15 | 6.5 | 2022.2 | |||||||||
位精确整数常量后缀 | N2775 | 15 | 2022.2 | |||||||||||
预处理条件中的__has_include | N2799 | 5 | 是 | 19.11* | 是 | 6.5 | 18.0 | |||||||
标识符语法,使用统一码标准附件31 | n2836 | 13 | 15 | 6.5 | 2022.2 | |||||||||
移除无原型的函数声明 | n2841 | 13 | 15 | 2022.2 |
| |||||||||
空初始化 | n2900 | partial* | partial* | partial* | partial* | partial* |
| |||||||
typeof 和 typeof_unqual | n2927 N2930 |
partial* 13 |
partial* 16 |
partial* | partial* | partial* | partial* | |||||||
新的关键字拼写 | 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 XLC++ |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ |
Nvidia nvcc |
c23 库特性
本节未完成 原因:C标准库的差异列表 |