C99 features as extensions to C89

The following features are enabled by default when you compile with the xlc invocation command. They are also enabled with the options -qlanglvl=extc89 (the default in xlc), -qlanglvl=stdc99, -qlanglvl=extc99 and -qlanglvl=extended. For more information on these options, see the -qlanglvl option .

Table 26. Default C99 features as extensions to C89
Language feature Discussed in:
Hexadecimal floating-point constants Hexadecimal floating-point literals
__func__ predefined identifier The __func__ predefined identifier
Concatenation of wide and non-wide character strings String concatenation
Mixed declarations and code Overview of data declarations and definitions
long long data type Integral types
Complex data type Complex floating-point types
_Bool data type Boolean types
Trailing comma allowed in enum declaration Enumeration type definition
Duplicate type qualifiers Type qualifiers
Variable length arrays Variable length arrays
Non-lvalue array subscripts Array subscripting operator [ ]
Flexible array members at the end of a structure or union Flexible array members
Non-constant expression in initializer for structure or union Initialization of structures and unions
Designated initializers Designated initializers for aggregate types (C only)
Removal of implicit function declaration Function declarations
Removal of implicit int return type in function declarations Function return type specifiers
Static arrays as function parameters Static array indices in function parameter declarations (C only)
Variable arguments in function-like macros Function-like macros
Empty arguments in function-like macros Function-like macros
Additional predefined macro names Standard predefined macro names
Compound literals Compound literals
_Pragma operator The _Pragma preprocessing operator
Standard pragmas Standard pragmas
New limit for #line directive The #line directive

The following feature is enabled by default when you compile with the xlc invocation command. It is also enabled with the options -qlanglvl=extc89 (the default in xlc), -qlanglvl=stdc99, -qlanglvl=extc99 and -qlanglvl=extended. It is also enabled or disabled by a specific compiler option, which is listed in the table below.

Table 27. Default C99 features as extensions to C89, with individual option controls
Language feature Discussed in: Individual option control
Digraphs Digraph characters -q[no]digraph

The following features are enabled by default when you compile with the c99 invocation command, or with the-qlanglvl=stdc99 or -qlanglvl=extc99 compiler options or related pragmas. They are also enabled or disabled by specific compiler options, which are listed in the table below; these compiler options are enabled in the default configuration file for the xlc invocation command.

Table 28. Strict C99 features as extensions to C89, with individual option controls enabled by default for xlc in the configuration file
Language feature Discussed in: Individual option control
C++ style comments Comments -q[no]cpluscmt
The inline function specifier The inline function specifier -qkeyword=inline

The following features are enabled only when you compile with the c99 invocation command, or with the-qlanglvl=stdc99 or -qlanglvl=extc99 compiler options or related pragmas. They are also enabled by specific compiler options, listed in the table below.

Table 29. Strict C99 features as extensions to C89, with individual option controls
Language feature Discussed in: Individual option control
Universal character names The Unicode standard -qlanglvl=[no]ucs
The restrict type qualifier The restrict type qualifier -qkeyword=restrict

The following feature is enabled only when you compile with the c99 invocation command, or with the-qlanglvl=stdc99 or -qlanglvl=extc99 compiler options or related pragmas.

Language feature Discussed in:
Unsuffixed long long integer literals Decimal integer literals

Related information