Top Qs
Timeline
Chat
Perspective
C2Y (C standard revision)
C programming language standard draft, next revision From Wikipedia, the free encyclopedia
Remove ads
C2Y is an informal name for the next revision of the C programming language after C23 that is hoped to be released in the 2020s, hence the '2' in "C2Y". An early working draft of C2Y was released in February 2024 as N3220.[1] The first "Working Group 14" (WG14) meeting primarily about the C2Y draft was held in February 2025.[2] Changes have already started to be integrated in popular C/C++ compilers: GCC 15 and Clang 19.[3][4][5]
Remove ads
Features
Summarize
Perspective
The following are changes integrated into the latest working draft of C2Y.[6][1] Keep in mind that the following changes are still is the draft stage, thus anything may change before the final ratification.
Note: This section is not complete. Changes listed in the History section will be incrementally migrated into this section over time.
Constants
- Add
0oand0Ooctal literal constant prefixes; such as0o137and0O247.[7] This change is similar to0band0Bbinary literal constant prefixes that were previously added in the C23 standard.[8] - Add
{}delimited escape sequences for C strings:\o{}for octal (arbitrary number of octal digits),\x{}for hexadecimal (arbitrary number of hex digits),\u{}for universal character name (sequence of hex digits that represents a valid Unicode character); such as"\o{110}\x{65}llo"which creates a string identical to "Hello" (in ASCII), and"\u{2021}"which is the Unicode value of a double dagger "‡" character.[7] This change was previously added in the C++23 standard.[9] The\u{}is a valid syntax in Rust and JavaScript computer languages too.
Operators
Statements
- For the
ifstatement, add support for variable declaration, such asif (int err = xmit_ch(ch)) log_err(err);, similar to how theforchange was added in the C99 standard. The new variable can be used inside the scope of all branches ofif,else,else iftoo. In C++, variable declaration has been allowed since the C++98 standard, further enhanced in the C++17 standard to allow for a second clause so the variable could be used within the condition itself, and C will use the later for C++ compatibility.[12]
Standard Library
Existing functions
New functions
- Add bit utility functions / macros / types in header
<stdbit.h>to examine many integer types. All start withstdc_to minimize conflict with legacy code and 3rd party libraries.[13] More bit utility functions were previously added in the C23 standard.[14]- Add
stdc_memreverse8()(8-bit) andstdc_memreverse8uN()(exact-width 8-bit) to reverse memory, such as0xAABBCCDDureversed into0xDDCCBBAAu. For function name suffix: "u" means unsigned, "N" means a multiple of 8, such as 8, 16, 32, ...[13] - Add
stdc_rotate_left_uc(),stdc_rotate_left_us(),stdc_rotate_left_ui(),stdc_rotate_left_ul(),stdc_rotate_left_ull(), and genericstdc_rotate_left()to rotate bits left.[13] - Add
stdc_rotate_right_uc(),stdc_rotate_right_us(),stdc_rotate_right_ui(),stdc_rotate_right_ul(),stdc_rotate_right_ull(), and genericstdc_rotate_right()to rotate bits right.[13] - Add
stdc_load8_leuN(),stdc_load8_beuN(),stdc_load8_aligned_leuN(),stdc_load8_aligned_beuN(), andstdc_load8_lesN(),stdc_load8_besN(),stdc_load8_aligned_lesN(),stdc_load8_aligned_besN()to perform endian-aware 8-bit loads. For function name suffix: "b" means big endian, "l" means little endian, "u" means unsigned, "s" means signed, "N" means a multiple of 8 such as 8, 16, 32, ...[13] - Add
stdc_store8_leuN(),stdc_store8_beuN(),stdc_store8_aligned_leuN(),stdc_store8_aligned_beuN(), andstdc_store8_lesN(),stdc_store8_besN(),stdc_store8_aligned_lesN(),stdc_store8_aligned_besN()to perform endian-aware 8-bit stores. For function name suffix: "b" means big endian, "l" means little endian, "u" means unsigned, "s" means signed, "N" means a multiple of 8 such as 8, 16, 32, ...[13]
- Add
Remove ads
Obsolete features
Obsolete C programming language features removed or deprecated in the working draft of C2Y:[6][1]
Constants
- For octal literals, such as
057, the leading zero will be retained but marked as obsolescent to avoid breaking existing code. Compilers should output a warning that will hopefully encourage rewrites. As of N3353, there will be no changes toprintf(), but WG14 would like to see a future paper that propose changes.[7]
Keywords
- Remove
_Imaginaryfrom the list of keywords.[15]
Remove ads
Compiler support
The following compilers implement an experimental compiler flag to support C2Y:
History
Summarize
Perspective
January 2024
The following changes were made after the January 2024 WG14 meeting:[6][1]
- N3192 - "Sequential hexdigits".
- Editorial - Adjusted a footnote in Annex K from "reserved" to "potentially reserved".
June 2024
The following changes were made after the June 2024 WG14 meeting:[6][1]
- N3064 - "Writing to multibyte character files".
- N3232 - "Round-trip rounding".
- N3233 - "Recommendation for printf rounding".
- N3239 - "Some constants are literally literals, v2".
- N3242 - "Problematic use of "correctly rounded".
- N3244 - "Slay Some Earthly Demons I".
- N3247 - "fopen "p" and bring fopen’s mode closer to POSIX 202x".
- N3254 - "Accessing byte arrays, v4".
- N3259 - "Support ++ and -- on complex values".
- N3260 - "_Generic selection expression with a type operand".
- N3273 - "alignof of an incomplete array type".
- N3274 - "Remove imaginary types, v3".
- Editorial - "may" -> "can" for alignment with ISO/IEC directives.
- Editorial - Table headings changed to match ISO/IEC directives.
September 2024
The following changes were made after the September/October 2024 WG14 meeting:[6][1]
- N3272 - "strftime broken-down structure usage (Option 1 - "Undefined Behavior)".
- N3286 - "Floating-point exception for Macro Replacements".
- N3287 - "Nonsensical Parenthetical in Mathematics Specification".
- N3291 - "Decimal Floating-Point Number Term Misuse".
- N3298 - "Introduce Complex Literals".
- N3303 - "HUGE_VAL Corrections".
- N3305 - "Leftover WANT_... Macros for <math.h> and Decimal Floating-Point".
- N3312 - "Relax Atomic Alignment Requirements".
- N3322 - "Allow Zero Length operations on Null Pointers (Including in the Library)".
- N3323 - "How Do You Add One To Something? (By Using The Proper Type)".
- N3324 - "'pole-error' Wording Fix".
- N3326 - "Standardize strnlen and wcsnlen".
- N3340 - "Slay Some Earthly Demons II".
- N3341 - "Slay Some Earthly Demons III".
- N3342 - "Slay Some Earthly Demons IV".
- N3344 - "Slay Some Earthly Demons VI".
- N3345 - "Slay Some Earthly Demons VII".
- N3346 - "Slay Some Earthly Demons VIII".
- N3349 - "abs Without Undefined Behavior".
- N3353 - "Obsolete Octal and Provide New, Proper Escape Sequences".
- N3355 - "Named/Labeled Loops".
- N3356 - "if Declarations".
- N3364 - "SNAN Initialization".
- N3366 - "Restartable Functions for Efficient Character Conversions".
- N3367 - "More Modern Bit Utilities".
- N3369 - "The _Lengthof Operator".
- N3370 - "Case Ranges in switch Statements".
- N3461 - "range error definition followup".
February 2025
The following changes were made after the February 2025 WG14 meeting:[6][1]
- N3363 - "<stdarg.h> Wording".
- N3401 - "SIGFPE and I/O (v2)".
- N3405 - "Improved Wording for Treatment of Error Conditions in <math.h>".
- N3409 - "Slay Some Earthly Demons X".
- N3410 - "Slay Some Earthly Demons XI".
- N3411 - "Slay Some Earthly Demons XII".
- N3418 - "Slay Some Earthly Demons XIV".
- N3447 - "Chasing Ghost I - "Constant Expressions".
- N3448 - "Chasing Ghosts II - "Accessing Allocated Storage".
- N3451 - "Initialization of Anonymous Structures and Unions (v2)".
- N3452 - "Complex Literals Warning".
- N3459 - "Integer and Arithmetic Constant Expressions".
- N3460 - "Complex Operators".
- N3466 - "Clarifications on Null Pointers in the Library".
- N3469 - "Big Array Size Survey (_Lengthof -> _Countof, and <stdcountof.h> header)".
- N3478 - "Slay Some Earthly Demons XIII".
- N3481 - "Slay Some Earthly Demons XVI".
- N3482 - "Slay Some Earthly Demons XVII".
- N3492 - "Improved treatment of error conditions for functions that round result".
- N3496 - "Clarify the Specification of the Width Macros".
- N3505 - "Preprocessor integer expressions, II".
Remove ads
See also
References
Further reading
External links
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads