C23 is the informal name for ISO/IEC 9899:2024, the next standard for the C programming language, which will replace C17 (standard ISO/IEC 9899:2018).[1] It was started in 2016 informally as C2x,[2] and was expected to be published in 2024.[3] The most recent publicly available working draft of C23 was released on April 1, 2023.[4] The first WG14 meeting for the C2x draft was held in October 2019,[5] virtual remote meetings were held in 2020 due to the COVID-19 pandemic, then various teleconference meetings continued to occur through 2024.

Features

[edit]

Changes integrated into the latest working draft of C23 are listed below.[4]

Standard Library

[edit]

New functions

[edit]

Existing functions

[edit]

Preprocessor

[edit]

Types

[edit]

Constants

[edit]

Keywords

[edit]

Syntax

[edit]

C++ compatibility

[edit]

Other features

[edit]

Obsolete features

[edit]

Some old obsolete features are either removed or deprecated from the working draft of C23:

  • Remove trigraphs.[62]
  • Remove K&R function definitions/declarations (with no information about the function arguments).[63][64]
  • Remove representations for signed integers other than two's complement. Two's complement signed integer representation will be required.[65]
  • The *_HAS_SUBNORM macros in <float.h> are obsolescent features.[66]

Compiler support

[edit]

The GCC 9,[67] Clang 9.0,[68] and Pelles C 11.00[69] compilers implement an experimental compiler flag to support this standard.

See also

[edit]

References

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

Further reading

[edit]
[edit]
Preceded byC17 C language standards Latest