Macros related to language levels
The following macros can be tested for C99 features, features related to GNU C, and other IBM language extensions. All of these macros except __STDC_VERSION__ are predefined to a value of 1 by a specific language level, represented by a suboption of the -qlanglvl compiler option, or any invocation or pragma that implies that suboption. If the suboption enabling the feature is not in effect, then the macro is undefined. For descriptions of the features related to these macros, see the XL C Language Reference.
Predefined macro name | Description | Predefined when the following language level is in effect |
---|---|---|
__C99_BOOL | Indicates support for the _Bool data type. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_COMPLEX | Indicates that the support for C99 complex types is enabled or that the C99 complex header should be included. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_COMPLEX_HEADER__ | Indicates support for C99-style complex headers. | c99complexheader |
__C99_CPLUSCMT | Indicates support for C++ style comments | extc1x | stdc99 | extc99 | stdc89 | extc89 | extended (also -qcpluscmt) |
__C99_COMPOUND_LITERAL | Indicates support for compound literals. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_DESIGNATED_INITIALIZER | Indicates support for designated initialization. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_DUP_TYPE_QUALIFIER | Indicates support for duplicated type qualifiers. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_EMPTY_MACRO_ARGUMENTS | Indicates support for empty macro arguments. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_FLEXIBLE_ARRAY_MEMBER | Indicates support for flexible array members. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99__FUNC__ | Indicates support for the __func__ predefined identifier. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_HEX_FLOAT_CONST | Indicates support for hexadecimal floating constants. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_INLINE | Indicates support for the inline function specifier. | extc1x | stdc99 | extc99 (also -qkeyword=inline) |
__C99_LLONG | Indicates support for C99-style long long data types and literals. | extc1x | stdc99 | extc99 |
__C99_MACRO_WITH_VA_ARGS | Indicates support for function-like macros with variable arguments. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_MAX_LINE_NUMBER | Indicates that the maximum line number is 2147483647. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_MIXED_DECL_AND_CODE | Indicates support for mixed declaration and code. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_MIXED_STRING_CONCAT | Indicates support for concatenation of wide string and non-wide string literals. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_NON_LVALUE_ARRAY_SUB | Indicates support for non-lvalue subscripts for arrays. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_NON_CONST_AGGR_INITIALIZER | Indicates support for non-constant aggregate initializers. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_PRAGMA_OPERATOR | Indicates support for the _Pragma operator. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_REQUIRE_FUNC_DECL | Indicates that implicit function declaration is not supported. | stdc99 |
__C99_RESTRICT | Indicates support for the C99 restrict qualifier. | |
__C99_STATIC_ARRAY_SIZE | Indicates support for the static keyword in array parameters to functions. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_STD_PRAGMAS | Indicates support for standard pragmas. | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_TGMATH | Indicates support for type-generic macros in tgmath.h | extc1x | stdc99 | extc99 | extc89 | extended |
__C99_UCN | Indicates support for universal character names. | extc1x | stdc99 | extc99 | ucs |
__C99_VAR_LEN_ARRAY | Indicates support for variable length arrays. | extc1x | stdc99 | extc99 | extc89 | extended |
__cplusplus | The numeric value that indicates the supported language standard as defined by that specific standard. | The format is yyyymmL. (For example, the format is 199901L for C99.) |
__DIGRAPHS__ | Indicates support for digraphs. | extc1x | stdc99 | extc99 | extc89 | extended (also -qdigraph) |
__EXTENDED__ | Indicates that language extensions are supported. |
extended |
__IBM__ALIGN | Indicates support for the __align type qualifier. | Always defined except when -qnokeyword=__alignof is specified |
__IBM_ALIGNOF__, __IBM__ALIGNOF__ | Indicates support for the __alignof__ operator. | extc1x | extc99 | extc89 | extended |
__IBM_ATTRIBUTES | Indicates support for type, variable, and function attributes. | extc1x | extc99 | extc89 | extended |
__IBM_COMPUTED_GOTO | Indicates support for computed goto statements. | extc1x | extc99 | extc89 | extended |
__IBM_EXTENSION_KEYWORD | Indicates support for the __extension__ keyword. | extc1x | extc99 | extc89 | extended |
__IBM_GCC__INLINE__ | Indicates support for the GCC __inline__ specifier. | extc1x | extc99 | extc89 | extended |
__IBM_DOLLAR_IN_ID | Indicates support for dollar signs in identifiers. | extc1x | extc99 | extc89 | extended |
__IBM_GENERALIZED_LVALUE | Indicates support for generalized lvalues. | extc1x | extc99 | extc89 | extended |
__IBM_INCLUDE_NEXT | Indicates support for the #include_next preprocessing directive. | Always defined |
__IBM_LABEL_VALUE | Indicates support for labels as values. | extc1x | extc99 | extc89 | extended |
__IBM_LOCAL_LABEL | Indicates support for local labels. | extc1x | extc99 | extc89 | extended |
__IBM_MACRO_WITH_VA_ARGS | Indicates support for variadic macro extensions. | extc1x | extc99 | extc89 | extended |
__IBM_NESTED_FUNCTION | Indicates support for nested functions. | extc1x | extc99 | extc89 | extended |
__IBM_PP_PREDICATE | Indicates support for #assert, #unassert, #cpu, #machine, and #system preprocessing directives. | extc1x | extc99 | extc89 | extended |
__IBM_PP_WARNING | Indicates support for the #warning preprocessing directive. | extc1x | extc99 | extc89 | extended |
__IBM_REGISTER_VARS | Indicates support for variables in specified registers. | Always defined. |
__IBM__TYPEOF__ | Indicates support for the __typeof__ or typeof keyword. |
Always defined |
__IBMC_COMPLEX_INIT | Indicates support for the macro based initialization of complex types: float _Complex, double _Complex, and long double _Complex. | extc1x |
__IBMC_GENERIC | Indicates support for the generic selection feature. | extc89 | extc99 | extended | extc1x |
__IBMC_NORETURN | Indicates support for the _Noreturn function specifier. | extc89 | extc99 | extended | extc1x extended | extended0x | c1xnoreturn |
__IBMC_STATIC_ASSERT | Indicates support for the static assertions feature. | extc89 | extc99 | extended | extc1x |
_LONG_LONG | Indicates support for long long data types. | extc1x | stdc99 | extc99 | | stdc89 | extc89 | extended (also -qlonglong) |
__SAA__ | Indicates that only language constructs that support the most recent level of SAA C standards are allowed. | saa |
__SAA_L2__ | Indicates that only language constructs that conform to SAA Level 2 C standards are allowed. | saal2 |
__STDC__ | Indicates that the compiler conforms to the ANSI/ISO C standard. | Predefined to 1 if ANSI/ISO C standard conformance is in effect. |
__STDC_HOSTED__ | Indicates that the implementation is a hosted implementation of the ANSI/ISO C standard. (That is, the hosted environment has all the facilities of the standard C available). | extc1x | stdc99 | extc99 |
__STDC_VERSION__ | Indicates the version of ANSI/ISO C standard which the compiler conforms to. | The format is yyyymmL. (For example, the format is 199901L for C99.) |