C Features
Summary
| Standard | Status | Rough % | One-line take |
|---|---|---|---|
C89 / C90 |
Essentially complete |
~99% |
Everything but trigraphs. |
C95 (NA1) |
Mostly complete |
~90% |
Digraphs missing; wide-char/ |
C99 |
Near-complete |
~97% |
|
C11/C17 |
Near-complete |
~95% |
Atomics, |
C23 |
Partial |
~60% |
Core keywords/ |
GNU C |
Broad |
~90% |
Stmt-exprs, |
Clang / Apple |
Broad |
~90% |
Blocks (Darwin), |
-std= accepts c89/c90/gnu89, c99/gnu99, c11/gnu11, c17/gnu17,
c23/gnu23/c2x.
With no -std, C mode behaves as C11 (STDC_VERSION = 201112L).
C23 Language Support (on-going)
Implemented:
-
nullptr/nullptr_t;true/false/boolas keywords. -
static_assertkeyword and single-argument_Static_assert(cond). -
constexprobject declarations (default-on gate). -
Enumerations with a fixed underlying type:
enum E : int { … }. -
Binary literals
0b…;u8character constants; empty initializer{}. -
[[deprecated]],[[nodiscard]],[[maybe_unused]],[[noreturn]], namespaced[[gnu::…]]. -
__has_include;typeof.
Missing:
-
_BitInt(N),_Decimal32/64/128. -
VA_OPT,#embed,#elifdef/#elifndef,has_c_attribute,has_embed. -
Digit separators (
1'000'000). -
typeof_unqual; C23autotype inference (only the GNU__auto_typespelling). -
unreachable()macro (only__builtin_unreachable);[[reproducible]]/[[unsequenced]]. -
[[fallthrough]]is parsed but not enforced.
GNU C extensions
-
Statement expressions
({ … }); computedgoto *pand&&label;label. -
GNU
case 1 … 5:ranges;typeof/typeof;auto_type;int128. -
attribute…— large catalog incl.packed,aligned,cleanup(full RAII),vector_size,format,visibility,section,constructor/destructor. -
~439
_builtin*(varargs, overflow, bit/byte, ~370 math, memory/string, hints). -
Inline asm: basic, extended (outputs/inputs/clobbers/symbolic names/tied),
asm goto,asm volatile, file-scope asm. -
__thread,__extension__, GNU##__VA_ARGS__. -
Missing / buggy: nested functions (none, will likely never be implemented like Clang);
__builtin_shufflevectorand__builtin_va_arg_packare stubs;L ## "x"wide-string paste is broken.
Clang / Apple extensions
-
Apple Blocks
^{ }+__block(Darwin targets,-fblocks). -
__has_feature,__has_builtin,__has_attribute; Clang builtins and__c11_atomic_*. -
Nullability qualifiers (
_Nonnull/_Nullable),availability(…)attribute,__builtin_convertvector. -
Clang-persona driver mode for build-system compatibility.