C23
來自 cppreference.com
< 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 (部分)* 12 |
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 | |||||||
帶訊息的 [[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 (部分)* 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 標準庫的不同列表 |