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 ]]
-
- 関数定義 における無名パラメータ
- 配列型 とその要素型の同一の cvr 修飾
- 単一引数の 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 10進浮動小数点演算と必要な数学関数がサポートされていることを示します。
-
__STDC_IEC_60559_COMPLEX__
- IEEE-754 複素数演算と必要な数学関数がサポートされていることを示します。
- このマクロは __STDC_IEC_559_COMPLEX__ を置き換えます。
新規ライブラリ機能
新規ヘッダー
ライブラリ機能
-
拡張バイナリ浮動小数点数学関数
-
この節は不完全です
理由: リストは未定
-
-
10進浮動小数点数学関数
-
-
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()
- 整数型の幅に関するマクロ定数
- 浮動小数点型の追加数値制限マクロ
- ライブラリバージョンテストマクロ
廃止予定の機能
削除された機能
- 旧式の 関数宣言 および 関数定義
- 2の補数以外の 符号付き整数 の表現
- 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 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 10進浮動小数点型 | N2341 |
4.2
(一部)*
12 |
13.0 (一部)* | ||||||||
[[
fallthrough
]]
|
N2408 | 10 | 9 | はい | 6.4 | 2021.1.2 (clang based) | |||||
u8
u8文字定数
|
N2418 | 10 | 15 | 6.5 | 2022.2 | ||||||
| プロトタイプ宣言のない 関数定義 の削除 | N2432 | 10 | 15 | 2022.2 | |||||||
[[
nodiscard
]]
メッセージ付き
|
N2448 | 11 | 10 | 対応 | 6.4 | 2021.1.2 (clang based) | |||||
| 関数定義における無名パラメータ | N2480 | 11 | 11 | 対応 | 6.4 | 2021.1.2 (clang based) | |||||
| ラベル 宣言前およびブロック終端での使用 | 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 based) | |||||
| 重複属性の許可 | N2557 | 11 | 13 | はい | 6.5 | 2021.4 (clang-based | |||||
| 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 | |||||||||
| 可変引数パラメータリストの要件緩和 variadic parameter list | 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標準ライブラリ用の別リストが必要 |