C23
From 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 に引き上げられます。
目次 |
[編集] 廃止予定の機能
[編集] 削除された機能
- 旧式の関数宣言と関数定義
- 2の補数以外の符号付き整数の表現
- 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
[編集] 新しい言語機能
- 10進浮動小数点型 (_Decimal32, _Decimal64, _Decimal128)
- ビット精度の整数 (_BitInt)
- 2進整数定数
-
u8文字定数 u8文字列リテラルの型変更- 桁区切り文字
' - 空の初期化子 ={}
- 属性
-
[[deprecated]] -
[[fallthrough]] -
[[maybe_unused]] -
[[nodiscard]] -
[[noreturn]] -
[[reproducible]] -
[[unsequenced]]
-
- 関数定義における無名パラメータ
- 配列型とその要素型の同一のcvr修飾
- 単一引数の_Static_assert
- static_assert がキーワードになる(互換性のために事前定義マクロである可能性あり)
- thread_local がキーワードになる(互換性のために事前定義マクロである可能性あり)
- 宣言と
}の前に置けるラベル - nullptr 定数と関連する nullptr_t 型
- true と false がキーワードになる(互換性のために事前定義マクロである可能性あり)
- 新しいプリプロセッサディレクティブ
- 丸め方向のためのプラグマ
-
STDCFENV_ROUND -
STDCFENV_DEC_ROUND
-
[編集] オプション機能のための機能テストマクロ
- __STDC_IEC_60559_BFP__
- IEEE-754 2進浮動小数点演算と必須の数学関数がサポートされていることを示す。
- このマクロは __STDC_IEC_559__ を置き換える。
- __STDC_IEC_60559_DFP__
- IEEE-754 10進浮動小数点演算と必須の数学関数がサポートされていることを示す。
- __STDC_IEC_60559_COMPLEX__
- IEEE-754 複素数演算と必須の数学関数がサポートされていることを示す。
- このマクロは __STDC_IEC_559_COMPLEX__ を置き換える。
[編集] 新しいライブラリ機能
[編集] 新しいヘッダ
[編集] ライブラリ機能
- 拡張2進浮動小数点数学関数
-
このセクションは未完成です
理由: リストは未定
-
- 10進浮動小数点数学関数
- - 既存および新規の浮動小数点数学関数の
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++ |
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 10進浮動小数点型 | 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* | |||||
| 2進整数定数 | 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 Standard Annex 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標準ライブラリのための異なるリスト |