# C compiler support

From cppreference.com
< c

| This page is maintained as best-effort and may lag behind most recent compiler releases. If you see something is out-of-date, please help us by updating it!

## C23 features

Note that this list may change, as the draft C23/2x standard evolves.

### 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 | Yes | 6.5 | 2021.1.2 (clang based) |  |  |  |  |  |
`[[nodiscard]]` | N2267 | 10 | 9 |  | Yes | 6.4 | 2021.1.2 (clang based) |  |  |  |  |  |
`[[maybe_unused]]` | N2270 | 10 | 9 |  | Yes | 6.4 | 2021.1.2 (clang based) |  |  |  |  |  |
`[[deprecated]]` | N2334 | 10 | 9 |  | Yes | 6.4 | 2021.1.2 (clang based) |  |  |  |  |  |
Attributes | N2335 N2554 | 10 | 9 |  | Yes | 6.4 | 2021.1.2 (clang based) |  |  |  |  |  |
IEEE 754 decimal floating-point types | N2341 | 4.2 (partial)* |  |  |  |  | 13.0 (partial)* |  |  |  |  |  |
`[[fallthrough]]` | N2408 | 10 | 9 |  | Yes | 6.4 | 2021.1.2 (clang based) |  |  |  |  |  |
`u8` character constants | N2418 | 10 | 15 |  |  | 6.5 | 2022.2 |  |  |  |  |  |
Removal of function definitions without prototype | N2432 | 10 | 15 |  |  |  | 2022.2 |  |  |  |  |  |
`[[nodiscard]]` with message | N2448 | 11 | 10 |  | Yes | 6.4 | 2021.1.2 (clang based) |  |  |  |  |  |
Unnamed parameters in function definitions | N2480 | 11 | 11 |  | Yes | 6.4 | 2021.1.2 (clang based) |  |  |  |  |  |
Labels before declarations and end of blocks | N2508 | 11 | 16 | Partial* |  | 6.5 | 17.0* |  |  |  |  |  |
Binary integer constants | N2549 | 4.3* 11 | 2.9* 9 | 19.0 (2015)** | Yes | 6.5 | 11.0* |  |  |  |  |  |
`__has_c_attribute` in preprocessor conditionals | N2553 | 11 | 9 |  | Yes | 6.5 | 2021.1.2 (clang based) |  |  |  |  |  |
Allow duplicate attributes | N2557 | 11 | 13 |  | Yes | 6.5 | 2021.4 (clang-based |  |  |  |  |  |
IEEE 754 interchange and extended types | N2601 | 7 (partial)* | 6 (partial)* |  | Partial* |  |  |  |  |  |  |  |
Digit separators | N2626 | 12 | 13 | 19.0 (2015)** | Yes | 6.5 | 18.0* |  |  |  |  |  |
`#elifdef` and `#elifndef` | N2645 | 12 | 13 |  | 13.1.6* | 6.5 | 2021.4 |  |  |  |  |  |
Type change of `u8` string literals | N2653 |  |  |  |  |  |  |  |  |  |  |  |
`[[maybe_unused]]` for labels | N2662 | 11 | 16 |  |  | 6.5 | 2022.2 |  |  |  |  |  |
`#warning` | N2686 | Yes | Yes |  | Yes | 6.5 | Yes |  |  |  |  |  |
Bit-precise integer types (_BitInt) | N2763 |  | 15 |  |  | 6.5 | 2022.2 |  |  |  |  |  |
`[[noreturn]]` | N2764 | 13 | 15 |  |  | 6.5 | 2022.2 |  |  |  |  |  |
Suffixes for bit-precise integer constants | N2775 |  | 15 |  |  |  | 2022.2 |  |  |  |  |  |
`__has_include` in preprocessor conditionals | N2799 | 5 | Yes | 19.11* | Yes | 6.5 | 18.0 |  |  |  |  |  |
Identifier Syntax using Unicode Standard Annex 31 | N2836 | 13 | 15 |  |  | 6.5 | 2022.2 |  |  |  |  |  |
Removal of function declarations without prototype | N2841 | 13 | 15 |  |  |  | 2022.2 |  |  |  |  |  |
Empty initializers | N2900 | Partial* | Partial* |  | Partial* | Partial* | Partial* |  |  |  |  |  |
`typeof` and `typeof_unqual` | N2927 N2930 | Partial* 13 | Partial* 16 |  | Partial* | Partial* | Partial* |  |  |  | Partial* |  |
New spelling of keywords | N2934 | 13 | 16 |  |  | 6.5 |  |  |  |  |  |  |
Predefined `true` and `false` | N2935 | 13 | 15 |  |  |  | 2022.2 |  |  |  |  |  |
`[[unsequenced]]` and `[[reproducible]]` | N2956 |  |  |  |  |  |  |  |  |  |  |  |
Relax requirements for variadic parameter list | N2975 | 13 | 16 |  |  | 6.5 | 2023.1 |  |  |  |  |  |
Type inference in object definitions | N3007 | 13 |  |  |  |  |  |  |  |  |  |  |
`#embed` | N3017 |  |  |  |  |  |  |  |  |  |  |  |
`constexpr` objects | N3018 | 13 |  |  |  |  |  |  |  |  |  |  |
Improved Normal Enumerations | N3029 | 13 |  |  |  |  |  |  |  |  |  |  |
Enhancements to Enumerations | N3030 | 13 | Maybe |  |  |  |  |  |  |  |  |  |
`__VA_OPT__` | N3033 | 8 | 12 |  |  | 6.5 |  |  |  |  |  |  |
Storage-class specifiers for compound literals | N3038 | 13 |  |  |  |  |  |  |  |  |  |  |
`nullptr` | N3042 | 13 | 16 |  |  |  |  |  |  |  |  |  |
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

### C23 library features

| This section is incomplete Reason: a different list for C standard libraries

## C99 features

### C99 core language features

| This section is incomplete Reason: needs to list C compilers, verification

C99 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 |
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
Universal-character-names in identifiers | N/A | 3.1 | Yes |  |  |  |  |  |  |  |  |  |
Increased translation limits | N590 | 0.9 | N/A |  |  |  |  |  |  |  |  |  |
// comments | N644 | 2.7 | Yes |  |  |  |  |  |  |  |  |  |
`restrict` pointers | N448 | 2.95 | Yes |  |  |  |  |  |  |  |  |  |
Enhanced arithmetic types | N815 N601 N620 N638 N657 N694 N809 | Yes | partial |  |  |  |  |  |  |  |  |  |
Flexible array members | N/A | 3.0 | Yes |  |  |  |  |  |  |  |  |  |
Variable-length array (VLA) types | N683 | 0.9 | Yes |  |  |  |  |  |  |  |  |  |
Variably-modified (VM) types | N2778 | N/A | Yes |  |  |  |  |  |  |  |  |  |
Designated initializers | N494 | 3.0 | Yes |  |  |  |  |  |  |  |  |  |
Non-constant initializers | N/A | 1.21 | N/A |  |  |  |  |  |  |  |  |  |
Idempotent cvr-qualifiers | N505 | 3.0 | N/A |  |  |  |  |  |  |  |  |  |
Trailing comma in enumerator-list | N/A | 0.9 | Yes |  |  |  |  |  |  |  |  |  |
Hexadecimal floating constants | N308 | 2.8 | Yes |  |  |  |  |  |  |  |  |  |
Compound literals | N716 | 3.1 | Yes |  |  |  |  |  |  |  |  |  |
Floating-point environment | N/A | partial | partial |  |  |  |  |  |  |  |  |  |
Requiring truncation for divisions of signed integer types | N617 | 0.9 | N/A |  |  |  |  |  |  |  |  |  |
Implicit return 0; in the `main()` function | N/A | Yes | Yes |  |  |  |  |  |  |  |  |  |
Declarations and statements in mixed order | N740 | 3.0 | Yes |  |  |  |  |  |  |  |  |  |
init-statement in `for` loops | N/A | Yes | Yes |  |  |  |  |  |  |  |  |  |
`inline` functions | N741 | 4.3 | Yes |  |  |  |  |  |  |  |  |  |
Predefined variable `__func__` | N611 | 2.95 | Yes |  |  |  |  |  |  |  |  |  |
Cvr-qualifiers and static in [] within function declarations | N/A | 3.1 | Yes |  |  |  |  |  |  |  |  |  |
Variadic macros | N707 | 2.95 | Yes |  |  |  |  |  |  |  |  |  |
`_Pragma` preprocessor operator | N634 | 3.0 | Yes |  |  |  |  |  |  |  |  |  |
Standard pragmas for floating-point evaluation | N631 N696 | No | No |  |  |  |  | Yes | Yes |  |  |  |
C99 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

### See also

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/compiler_support&oldid=145580"