Skip to content
Jiří Malák edited this page Sep 15, 2021 · 34 revisions

C99 Compliance

C99 compatibility is an undocumented feature, since the implementation is not complete. Use the -za99 switch to turn on the C99 extensions that are implemented (see below).

When and if other C99 features will be added depends purely on how much effort contributors want to invest. Some features are fairly esoteric and there appears to be little or no demand for them (eg. complex math). The features most likely to be implemented are the ones that add new functionality that cannot be achieved through other means (eg. hex floating-point constants).

Feature Status Notes
restricted character set support via digraphs partialy not fully :> is used as OW operator
restricted character set support via <iso646.h> yes
restricted character set support via trigraphs yes
wide character library support in <wchar.h> and <wctype.h> yes
restricted pointers yes with -za99 option
more precise aliasing rules via effective type ???
variable length arrays -
flexible array members -
static and type qualifiers in parameter array declarators -
complex and imaginary support yes including <complex.h>
type-generic math macros in <tgmath.h> -
the long long int type and library functions yes
increased minimum translation limits yes generally no fixed limits in compiler
additional floating-point characteristics in <float.h> yes
remove implicit int yes diagnosed via W304, W305
remove implicit function declaration yes diagnosed via W131
return without expression not permitted in function that returns a value (and vice versa) yes diagnosed via W107, E1051, E1096
reliable integer division ???
universal character names (\u and \U) -
extended identifiers yes all characters of an identifier are significant
hexadecimal floating-point constants yes
%a and %A printf/scanf conversion specifiers yes
compound literals -
designated initializers yes
// comments yes
extended integer types and library functions yes include <inttypes.h> and <stdint.h>
preprocessor arithmetic done in intmax_t/uintmax_t yes with -za99 option
mixed declarations and code yes
new block scopes for selection and iteration statements ???
integer constant type rules ???
integer promotion rules ???
macros with a variable number of arguments yes
the vscanf family of functions yes include <stdio.h> and <wchar.h>
additional math library functions in <math.h> partial
treatment of error conditions by math library functions (math_errhandling) ???
floating-point environment access in <fenv.h> yes
trailing comma allowed in enum declaration yes
%lf conversion specifier allowed in printf ???
inline functions yes
boolean type _Bool yes with -za99 option
<stdbool.h> header file yes
empty macro arguments yes
new structure type compatibility rules (tag compatibility) ???
additional predefined macro names ???
_Pragma preprocessing operator yes
standard pragmas ???
__func__ predefined identifier yes
va_copy macro yes
additional strftime conversion specifiers yes
LIA compatibility annex ???
deprecate ungetc at the beginning of a binary file ???
remove deprecation of aliased array parameters ???
conversion of array to pointer not limited to lvalues ???
relaxed constraints on aggregate and union initialization yes with -aa option
relaxed restrictions on portable header names yes

- means not yet implemented

??? means unclear

Clone this wiki locally