C23 (C言語)とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > C23 (C言語)の意味・解説 

C23 (C言語)

(C2x から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/07/27 08:30 UTC 版)

C言語 > C23 (C言語)

C23(ISO/IEC 9899:2024)とは、C言語の現在のオープン標準であり、C17(英語版)(ISO/IEC 9899:2018)の後継規格である[1]。2016年にC2xとして非公式に策定が開始され[2]、2024年10月31日に発行された[3]。発行された規格に最も近い自由に入手できる草案はN3220である(#利用可能な文書を参照)[4]。C2x草案の最初のWG14会議は2019年10月に開催され[5]、新型コロナウイルス感染症の世界的流行によって2020年は仮想リモート会議として開催され、その後、2024年まで様々な遠隔会議が継続的に開催された。

C23では、__STDC_VERSION__の値が201710Lから202311Lに変更される。一般名の「C17」や「C23」はISO規格識別子の年(9899:2018と9899:2024)ではなく、規格発行前に固定されるこれらの値を反映している。

機能

C23の最新の作業草案に統合された変更点は以下の通りである[6]。

標準ライブラリ

新規関数

  • <string.h(英語版)>にmemset_explicit()関数を追加[7]。機密データを消去する目的で、最適化に関係なく常にメモリ書き込み (store) を実行する必要がある場面で使用される。
  • <string.h>にmemccpy(英語版)()関数を追加[8]。文字列を効率的に連結する。POSIXとSVIDのC拡張と同様である。
  • <string.h>にstrdup(英語版)()およびstrndup()関数を追加[9]。文字列の複製を動的に確保する。POSIXとSVIDのC拡張と同様である。
  • ポインタのバイトアライメントを決定するために<stdlib.h(英語版)>にmemalignment()関数を追加[10]。
  • 新たなヘッダの<stdbit.h>を追加し、多くの整数型でビット関連の操作をするための関数、マクロ、データ型を定義。全てstdc_で始まるので古いコードやサードパーティのライブラリとの競合を最小限に抑えることができる[11]。
    • 以下の*は特定の整数型向けの関数ではこれをuc、us、ui、ul、ullのいずれかに置き換え、型ジェネリックマクロではこれを除去して読む[11]。
    • ビットで表現した場合の1または0の個数を数えるstdc_count_ones*()およびstdc_count_zeros*()関数を追加[11]。
    • ビットで表現した場合の先頭の1または0の個数を数えるstdc_leading_ones*()およびstdc_leading_zeros*()関数を追加[11]。
    • ビットで表現した場合の末尾の1または0の個数を数えるstdc_trailing_ones*()およびstdc_trailing_zeros*()関数を追加[11]。
    • ビットで表現した場合に最上位ビットから数えて最初に1または0が現れる位置を探すstdc_first_leading_one*()およびstdc_first_leading_zero*()関数を追加[11]。
    • ビットで表現した場合に最下位ビットから数えて最初に1または0が現れる位置を探すstdc_first_trailing_one*()およびstdc_first_trailing_zero*()関数を追加[11]。
    • 値が正しく2の冪乗であるかを確認する(単一のビットだけが1の場合にtrueを返す)stdc_has_single_bit*()関数を追加[11]。
    • 与えられた値より大きくない最大の2の累乗を計算するstdc_bit_floor*()関数を追加[11]。
    • 与えられた値より小さくない最小の2の累乗を計算するstdc_bit_ceil*()関数を追加[11]。
    • 与えられた値を表すのに必要なビット数を調べるstdc_bit_width*()関数を追加[11]。
  • <time.h>にglibcとmuslにあるような時間を表す構造体をtime_tに変換できるtimegm()関数を追加する[12]。
  • <math.h(英語版)>にIEEE 754-2019の推奨に基づく
    この節は更新が必要とされています。 この節には古い情報が掲載されています。編集の際に新しい情報を記事に反映させてください。反映後、このタグは除去してください。 (2024年11月)

    以下のコンパイラはC23に実験的に対応しており、これを利用するためのオプションを提供している:

    また、GCCに関しては、バージョン15からC23がコンパイラ標準となっている。[70]

利用可能な文書

C17などの他のC言語の標準規格と同様に、C23のISOの公式規格書は自由に入手することはできない。

C23の仕様が確定する前の最後の作業草案は2023年4月1日付のN3096である[6]。この草案の後の数カ月間、2023年7日9日付の作業草案N3149と2024年2月22日付の公式標準草案N3219が作成されるまでに数百の変更[71]が行われた[71][72]。これら以降の草案は非公開である[71][72]。

標準草案N3219が発表されたのと同日、新たな作業草案N3220[4]が公開された。この草案は公式には将来のC言語の標準である「C2Y」の草案であると説明[72]されているが、付随する「編集者レポート」では、N3219との違いは付録Kの1つの脚注の修正だけであると明記されている[72]。

参考文献

  • N3096 (last freely-available working draft before C23); WG14; April 2023. (free download)
  • N3149 (working draft of C23 standard); WG14; July 2023. (not available to public)
  • N3219 (ISO/IEC 9899:2023 DIS Draft); WG14; February 2024. (ISO draft available but not free)
  • ISO/IEC 9899:2024 (official C23 standard); ISO; 2024. (planning for release in 2024)
  • N3220 (first working draft after C23; differs from draft standard N3219 only in one footnote[72]); WG14; February 2024. (free download)

脚注

  1. ↑ “History of C”. cppreference.com (2022年6月27日). 2022年10月19日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  2. ↑ “WG14-N2086: C2x Charter”. open-std.org (2016年9月20日). 2022年12月22日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  3. ↑ “ISO/IEC PRF 9899”. iso.org. 2024年9月19日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  4. 1 2 “ISO/IEC 9899:2024 (en) — N3220 working draft”. open-std.org (2024年2月22日). 2024年11月10日閲覧。
  5. ↑ “WG14-N2437: Agenda for October 2019”. open-std.org (2019年10月21日). 2021年3月5日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  6. 1 2 “WG14-N3096: Draft for ISO/IEC 9899:2024”. open-std.org (2023年4月1日). 2023年4月2日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  7. ↑ “WG14-N2897: memset_explicit()”. open-std.org (2021年12月27日). 2022年10月25日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  8. ↑ “WG14-N2349: Toward more efficient string copying and concatenation”. open-std.org (2019年3月18日). 2022年9月30日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  9. ↑ “WG14-N2353: strdup() and strndup()”. open-std.org (2019年3月18日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  10. ↑ “WG14-N2974: Queryable pointer alignment”. open-std.org (2022年4月15日). 2022年10月13日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  11. 1 2 3 4 5 6 7 8 9 10 11 “WG14-N3022: Modern Bit Utilities”. open-std.org (2022年7月6日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  12. ↑ “WG14-N2833: Add timegm() as non-optional part of time.h”. open-std.org (2021年10月7日). 2021年12月1日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  13. ↑ See N3096 § B.11 for a useful overview. The functions were added in separate documents: N2488, its updated versions, and its refs.
  14. 1 2 3 “WG14-N2630: formatted input/output of binary integer numbers”. open-std.org (2021年1月1日). 2022年12月14日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  15. ↑ “WG14-N3020: Qualifier-preserving standard library functions”. open-std.org (2022年6月13日). 2022年10月13日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  16. 1 2 “WG14-N2645: Add support for preprocessing directives #elifdef and #elifndef”. open-std.org (2020年1月25日). 2022年11月28日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  17. ↑ “GCC 12 Adds Support For New #elifdef #elifndef Directives”. phoronix (2021年5月12日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  18. ↑ “WG14-N3017: #embed - a scannable, tooling-friendly binary resource inclusion mechanism”. open-std.org (2022年6月27日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  19. ↑ “WG14-N2686: #warning”. open-std.org (2022年7月22日). 2022年11月28日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  20. ↑ “WG14-N2799: __has_include for C”. open-std.org (2021年8月30日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  21. ↑ “WG14-N2553: Querying attribute support”. open-std.org (2020年8月4日). 2022年10月14日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  22. ↑ “WG14-N3033: Comma omission and comma deletion”. open-std.org (2022年7月20日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  23. 1 2 “WR14-N3042: Introduce the nullptr constant”. open-std.org (2022年7月22日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  24. ↑ “WG14-N2763: Adding a Fundamental Type for N-bit integers”. open-std.org (2021年6月21日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  25. ↑ “WG14-N3035: _BitInt Fixes”. open-std.org (2022年7月21日). 2022年10月13日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  26. ↑ “WG14-N2867: Checked N-Bit Integers”. open-std.org (2021年11月28日). 2022年12月14日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  27. ↑ “WG14-N2778: Variably-Modified Types”. open-std.org (2021年7月11日). 2022年12月22日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  28. ↑ “WG14-N2607: Compatibility of Pointers to Arrays with Qualifiers”. open-std.org (2020年10月31日). 2022年10月13日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  29. ↑ “WG14-N2899: Not-so-magic - typeof for C”. open-std.org (2022年1月21日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  30. ↑ “WG14-N3007: Type inference for object definitions”. open-std.org (2022年6月10日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  31. ↑ “WG14-N3037: Improved Rules for Tag Compatibility (updates N3032)”. 2024年11月10日閲覧。
  32. ↑ “C23 is Finished: Here is What is on the Menu” (英語). The Pasture (2022年7月31日). 2024年11月10日閲覧。
  33. ↑ “WG14-N2775: Literal suffixes for bit-precise integers”. open-std.org (2021年7月13日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  34. ↑ “WG14-N2549: Allow for binary integer constants”. open-std.org (2020年7月30日). 2022年12月22日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  35. ↑ “WG14-N2626: Digit separators”. open-std.org (2020年12月15日). 2022年12月19日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  36. ↑ “WG14-N3030: Enhancements to Enumerations”. open-std.org (2022年7月19日). 2022年11月26日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  37. ↑ “WG14-N3029: Improved Normal Enumerations”. open-std.org (2022年7月19日). 2023年1月29日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  38. ↑ “WG14-N2935: Make false and true first-class language features”. open-std.org (2022年2月15日). 2022年11月21日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  39. ↑ “WG14-N2934: Revise spelling of keywords”. open-std.org (2022年2月15日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  40. ↑ “WG14-N2508: Free Positioning of Labels Inside Compound Statements”. open-std.org (2020年3月28日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  41. ↑ “WG14-N2510: Allowing unnamed parameters in a function definition”. open-std.org (2020年4月9日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  42. ↑ “WG14-N2900: Consistent, Warningless, and Intuitive Initialization with {}”. open-std.org (2022年1月1日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  43. ↑ “WG14-N2975: Relax requirements for variadic parameter lists”. open-std.org (2022年4月15日). 2022年11月28日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  44. ↑ “WG14-N2335: Attributes in C”. open-std.org (2019年3月9日). 2022年10月26日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  45. 1 2 “Unsequenced functions”. open-std.org. 2024年7月18日閲覧。
  46. ↑ “WG14-N2265: Harmonizing static_assert with C++”. open-std.org (2018年7月6日). 2023年3月28日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  47. ↑ “Labels at the end of compound statements (C compatibility)” (2022年1月13日). 2024年11月10日閲覧。
  48. ↑ “WG14-N2334: The deprecated attribute”. open-std.org (2019年1月22日). 2022年10月19日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  49. ↑ “WG14-N2408: The fallthrough attribute”. open-std.org (2019年8月11日). 2022年12月25日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  50. ↑ “WG14-N2270: The maybe_unused attribute”. open-std.org (2018年7月6日). 2022年12月25日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  51. ↑ “WG14-N2267: The nodiscard attribute”. open-std.org (2018年7月6日). 2022年10月19日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  52. ↑ “WG14-N2554: Minor attribute wording cleanups”. open-std.org (2020年8月4日). 2022年11月28日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  53. ↑ “WG14-N2764: The noreturn attribute”. open-std.org (2021年6月21日). 2022年12月25日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  54. ↑ “WG14-N2557: Allow Duplicate Attributes”. open-std.org (2020年9月1日). 2022年11月28日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  55. ↑ “WG14-N2418: Adding the u8 character prefix”. open-std.org (2019年9月2日). 2023年1月13日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  56. ↑ “What is the point of the UTF-8 character literals proposed for C++17?” (英語). Stack Overflow. 2024年11月10日閲覧。
  57. ↑ “WG14-N2341: ISO/IEC TS 18661-2 - Floating-point extensions for C - Part 2: Decimal floating-point arithmetic”. open-std.org (2019年2月26日). 2022年11月21日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  58. ↑ “WG14-N2601: Annex X - IEC 60559 interchange and extended types”. open-std.org (2020年10月15日). 2022年10月14日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  59. ↑ “WG14-N3018: The constexpr specifier for object definitions”. open-std.org (2022年7月6日). 2022年12月24日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  60. ↑ “WG14-N2653: char8_t: A type for UTF-8 characters and strings (Revision 1)”. open-std.org (2021年6月4日). 2023年5月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  61. ↑ “WG14-N2728: char16_t & char32_t string literals shall be UTF-16 & UTF-32”. open-std.org (2021年5月15日). 2023年5月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  62. ↑ “WG14-N3038: Introduce storage-class specifiers for compound literals”. open-std.org (2022年7月21日). 2022年11月26日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  63. ↑ “WG14-N2940: Removing trigraphs??!”. open-std.org (2022年3月2日). 2022年10月26日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  64. ↑ “WG14-N2432: Remove support for function definitions with identifier lists proposal”. open-std.org (2019年9月25日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  65. ↑ “WG14-N2841: No function declarators without prototypes”. open-std.org (2021年10月10日). 2022年11月12日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  66. ↑ “WG14-N2412: Two's complement sign representation”. open-std.org (2019年8月11日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  67. ↑ “WG14-N2993: Make *_HAS_SUBNORM be obsolescent”. open-std.org (2022年6月6日). 2022年12月5日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  68. ↑ “Clang 9.0 - add new language mode for C2x”. LLVM Project Repository (2019年5月14日). 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  69. ↑ “Pelles C - major changes between 10.00 and 11.00”. smorgasbordet.com. 2022年12月27日時点のオリジナルよりアーカイブ。2024年11月10日閲覧。
  70. ↑ “C Standards Support in GCC - GNU Project”. gcc.gnu.org. 2025年10月13日閲覧。
  71. 1 2 3 “N3150 - Editor's Report, Post January-February 2023 Meeting”. open-std.org (2023年7月8日). 2024年11月10日閲覧。
  72. 1 2 3 4 5 “N3221 - Editor's Report, Post January 2024 Meeting”. open-std.org (2024年2月15日). 2024年11月10日閲覧。

関連項目

外部リンク




英和和英テキスト翻訳

英語⇒日本語日本語⇒英語
  •  C23 (C言語)のページへのリンク

辞書ショートカット

すべての辞書の索引

「C23 (C言語)」の関連用語

C23 (C言語)のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C23 (C言語)のページの著作権

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのC23 (C言語) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2026 GRAS Group, Inc.RSS