Status of C99 features in GCC

This table is based on the list in the foreword to the printed standard ISO/IEC 9899:1999 (E), as amended by ISO/IEC 9899:1999/Cor.1:2001 (E) and ISO/IEC 9899:1999/Cor.2:2004 (E).

Where "Library Issue" is listed in conjunction with some other status, this means that some compiler support is needed for the library support, or desirable in conjunction with it. Note that the headers required of conforming freestanding implementations (clause 4 paragraph 6) do not count as library issues.

This page describes the C99 support in mainline GCC, not in any particular release. Information is also available on C99 support in GCC 4.2, C99 support in GCC 4.1, C99 support in GCC 4.0, C99 support in GCC 3.4, C99 support in GCC 3.3, C99 support in GCC 3.1 and 3.2 and on C99 support in GCC 3.0, but not on the much more limited support in GCC 2.95.

See below the table for further notes on some issues.

Feature Library Issue Done Broken Missing
restricted character set support via digraphs and
<iso646.h> (originally specified in AMD1)
Done
wide character library support in <wchar.h>
and <wctype.h> (originally specified in AMD1)
Library Issue Missing
more precise aliasing rules via effective type Done
restricted pointers Done
variable-length arrays Broken
flexible array members Done
static and type qualifiers
in parameter array declarators
Done
complex (and imaginary) support in <complex.h> Broken
type-generic math macros in <tgmath.h> Library Issue Done
the long long int type and library functions Done
increased minimum translation limits Done
additional floating-point characteristics
in <float.h>
Done
remove implicit int Done
reliable integer division Done
universal character names (\u and \U) Done
extended identifiers Missing
hexadecimal floating-point constants and %a
and %A printf/scanf conversion specifiers
Library IssueDone
compound literals Done
designated initializers Done
// comments Done
library functions in <inttypes.h> Library Issue
extended integer types in <stdint.h> Missing
remove implicit function declaration Done
preprocessor arithmetic
done in intmax_t/uintmax_t
Done
mixed declarations and code Done
new block scopes for selection
and iteration statements
Done
integer constant type rules Done
integer promotion rules Done
macros with a variable number of arguments Done
the vscanf family of functions in
<stdio.h> and <wchar.h>
Library Issue Done
additional math library functions in <math.h> Library Issue Missing
floating-point environment access
in <fenv.h>
Library Issue
IEC 60559 (also known as
IEC 559 or IEEE arithmetic) support
Broken
trailing comma allowed in enum declaration Done
%lf conversion specifier
allowed in printf
Library IssueDone
inline functions Done
the snprintf family of functions in <stdio.h> Library Issue Done
boolean type in <stdbool.h> Done
idempotent type qualifiers Done
empty macro arguments Done
new struct type compatibility
rules (tag compatibility)
Done
additional predefined macro names Missing
_Pragma preprocessing operator Done
standard pragmas Missing
__func__ predefined identifier Done
va_copy macro Done
additional strftime conversion specifiers Library IssueDone
deprecate ungetc at the
beginning of a binary file
Library Issue
remove deprecation of
aliased array parameters
Done
conversion of array to pointer not limited to lvalues Done
relaxed constraints on aggregate
and union initialization
Done
relaxed restrictions on portable header names Done
return without expression not permitted in
function that returns a value (and vice versa)
Done
Feature Library Issue Done Broken Missing

Further notes