_Complex
support requires an underlying support library such as compiler-rt to provide functions like __divsc3
. Compiler-rt isn't linked in automatically in MSVC style environments. type-generic math macros in <tgmath.h> | N693 | Yes |
the long long int type | N601 | Yes |
increase minimum translation limits | N590 | Clang 3.2 |
additional floating-point characteristics in <float.h> | Unknown | Clang 16 |
remove implicit int |
N635 | Yes |
N692 | Yes |
N722 | Yes |
reliable integer division | N617 | Yes |
universal character names (\u and \U) | Unknown | Yes |
extended identifiers | N717 | Clang 17 |
hexadecimal floating-point constants | N308 | Yes |
compound literals | N716 | Yes |
designated initializers | N494 | Yes |
// comments | N644 | Yes |
extended integer types and library functions in <inttypes.h> and <stdint.h> | Unknown | Yes |
remove implicit function declaration | N636 | Yes |
preprocessor arithmetic done in intmax_t/uintmax_t | N736 | Yes |
mixed declarations and code | N740 | Yes |
new block scopes for selection and iteration statements | Unknown | Yes |
integer constant type rules | N629 | Yes |
integer promotion rules | N725 | Yes |
macros with a variable number of arguments | N707 | Yes |
IEC 60559 support | Unknown | Partial Clang supports much of the language requirements for Annex F, but full conformance is only possible to determine when considering the compiler's language support, the C runtime library's math library support, and the target system's floating-point environment support. Clang does not currently raise an "invalid" floating-point exception on certain conversions, does not raise floating-point exceptions for arithmetic constant expressions, and other corner cases. Note, Clang does not define __STDC_IEC_559__ because the compiler does not fully conform. However, some C standard library implementations ( glibc, musl will define the macro regardless of compiler support unless the compiler defines __GCC_IEC_559 , which Clang does not currently define. Additionally, Clang intentionally will not conform to Annex F on 32-bit x86 without SSE2 due to the behavior of floating-point operations in x87. |
trailing comma allowed in enum declaration | Unknown | Yes |
inline functions | N741 | Yes |
boolean type in <stdbool.h> | N815 | Yes |
idempotent type qualifiers | N505 | Yes |
empty macro arguments | N570 | Yes |
additional predefined macro names | Unknown | Yes |
_Pragma preprocessing operator | N634 | Yes |
standard pragmas |
N631 | Yes |
N696 | Yes |
__func__ predefined identifier | N611 | Yes |
va_copy macro | N671 | Yes |
remove deprecation of aliased array parameters | Unknown | Yes |
conversion of array to pointer not limited to lvalues | N835 | Yes |
relaxed constraints on aggregate and union initialization | N782 | Clang 3.4 |
relaxed restrictions on portable header names | N772 | Yes |
return without an expression not permitted in function that returns a value | Unknown | Yes |
C89 implementation status
Clang implements all of the ISO 9899:1990 (C89) standard.
You can use Clang in C89 mode with the -std=c89
or -std=c90
options.