C23
From cppreference.com
< c
The next generation of the C standard.
See: The current IS schedule for C23.
This section is incomplete Reason: accepted changes not yet included in the working draft |
Obsolete
Removed
- Old-style function declarations and definitions
- Representations for signed integers other than two's complement
- Permission that u/U-prefixed character constants and string literals may be not UTF-16/32
- Mixed wide string literal concatenation
- Support for calling realloc() with zero size (the behavior becomes undefined)
- __alignof_is_defined and __alignas_is_defined
Deprecated
- Old feature-test macros
- DECIMAL_DIG
- Definition of following numeric limit macros in
<math.h>
(they should be used via<limits.h>
) - _Noreturn function specifier
- _Noreturn attribute token
- __bool_true_false_are_defined
New language features
- Decimal floating-point types (_Decimal32, _Decimal64, and _Decimal128)
- Binary integer constants
-
u8
character constants - Type change of
u8
string literals - Digit separator
'
- Empty initializer = {}
- Attributes
-
[[deprecated]]
-
[[fallthrough]]
-
[[maybe_unused]]
-
[[nodiscard]]
-
[[noreturn]]
-
- Unnamed parameters in function definitions
- Identical cvr-qualifications for array types and their element types
- Single-argument _Static_assert
- Labels followed by declarations and
}
- New preprocessor directives
- Pragmas for rounding direction
-
STDC
FENV_ROUND -
STDC
FENV_DEC_ROUND
-
Feature test macros for optional features
- __STDC_IEC_60559_BFP__
- Indicates IEEE-754 binary floating-point arithmetic and required math functions are supported.
- This macro supersedes __STDC_IEC_559__.
- __STDC_IEC_60559_DFP__
- Indicates IEEE-754 decimal floating-point arithmetic and required math functions are supported.
- __STDC_IEC_60559_COMPLEX__
- Indicates IEEE-754 complex arithmetic and required math functions are supported.
- This macro supersedes __STDC_IEC_559_COMPLEX__.
New library features
- Extended binary floating-point math functions
-
This section is incomplete
Reason: List TBD
-
- Decimal floating-point math functions
- -
dN
variants for existing and new floating-point math functions - quantizedN()
- samequantumdN()
- quantumdN()
- llquantexpdN()
- encodedecdN()
- decodedecdN()
- encodebindN()
- decodebindN()
- -
- Floating-point formatting functions
- Library support for UTF-8
-
char8_t
type alias - mbrtoc8()
- c8rtomb()
- atomic_char8_t type alias
- ATOMIC_CHAR8_T_LOCK_FREE test macro
-
- POSIX functions
- memccpy()
- strdup()
- strndup()
- asctime_r()
- ctime_r()
- gmtime_r()
- localtime_r()
- Extensions for strftime() and wcsftime()
- Extensions for fscanf() and fprintf() function families
-
wN
andwfN
length modifiers for [u]intN_t and [u]int_fastN_t respectively -
H
,D
, andDD
length modifiers for _Decimal32, _Decimal64, and _Decimal128 respectively -
b
conversion specifier for unsigned integer types
-
- timespec_getres()
- Macro constants for width of integer types
- Additional numeric limit macros for floating-point types
- Library version-test macros
Defect reports
Defect Reports fixed in C23 (? defects) |
---|
Compiler support
C23 core language features
This section is incomplete Reason: status for Apple Clang and other compilers supporting C2x |
C23 feature |
Paper(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XLC++ |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ (ex Portland Group/PGI) |
Nvidia nvcc |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
_Static_assert with no message | N2265 | 9 | 9 | Yes | ||||||||||
[[nodiscard]]
|
N2267 | 10 | 9 | Yes | ||||||||||
[[maybe_unused]]
|
N2270 | 10 | 9 | Yes | ||||||||||
[[deprecated]]
|
N2334 | 10 | 9 | Yes | ||||||||||
Attributes | N2335 N2554 |
10 | 9 | Yes | ||||||||||
IEEE 754 decimal floating-point types | N2341 | 4.2 (partial)* | 13.0 (partial)* | |||||||||||
[[fallthrough]]
|
N2408 | 10 | 9 | Yes | ||||||||||
u8 character constants
|
N2418 | 10 | 15 | |||||||||||
Removal of function definitions without prototype | N2432 | 10 | 15 | |||||||||||
[[nodiscard]] with message
|
N2448 | 11 | 10 | Yes | ||||||||||
Unnamed parameters in function definitions | N2480 | 11 | 11 | Yes | ||||||||||
Labels before declarations and end of blocks | N2508 | 11 | Partial* | 17.0* | ||||||||||
Binary integer constants | N2549 | 4.3* 11 |
2.9* 9 |
19.0 (2015)** | Yes | 11.0* | ||||||||
__has_c_attribute in preprocessor conditionals | N2553 | 11 | 9 | Yes | ||||||||||
Allow duplicate attributes | N2557 | 11 | 13 | Yes | ||||||||||
IEEE 754 interchange and extended types | N2601 | 7 (partial)* | 6 (partial)* | Partial* | ||||||||||
Digit separators | N2626 | 12 | 13 | 19.0 (2015)** | Yes | 18.0* | ||||||||
#elifdef and #elifndef
|
N2645 | 12 | 13 |
13.1.6* |
||||||||||
Type change of u8 string literals
|
N2653 | |||||||||||||
[[maybe_unused]] for labels
|
N2662 | 11 | ||||||||||||
#warning | N2686 | Yes | Yes | Yes | Yes | Yes | ||||||||
Bit-precise integer types (_BitInt) | N2763 | 15 | ||||||||||||
[[noreturn]]
|
N2764 | 15 | ||||||||||||
Suffixes for bit-precise integer constants | N2775 | 15 | ||||||||||||
__has_include in preprocessor conditionals | N2799 | 5 | Yes | 19.11* | Yes | 4.13 | 18.0 | |||||||
Removal of function declarations without prototype | N2841 | 15 |
| |||||||||||
Empty initializers | N2900 | Partial* | Partial* | Partial* | Partial* | Partial* |
| |||||||
typeof and remove_quals | N2927 | Partial* | Partial* | Partial* | Partial* | Partial* | Partial* | |||||||
C23 feature |
Paper(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XLC++ |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ |
Nvidia nvcc |
C23 library features
This section is incomplete Reason: a different list for C standard libraries |