Macros related to language levels
The following macros can be tested for
C99 features, features related to GNU C or C++,
and other IBM language
extensions. All of these macros
except
__cplusplus, __STDC__
, and
__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/C++ Language
Reference.
| Predefined macro name | Description | Predefined when the following language level is in effect |
|---|---|---|
__BOOL__ |
Indicates that the bool keyword is accepted. | Always defined except when -qnokeyword=bool 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. |
|
| __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. |
|
| __C99_MAX_LINE_NUMBER | Indicates that the maximum line number is 2147483647. |
|
__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. |
|
__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. |
|
__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 |
__C99_VARIABLE_LENGTH_ARRAY |
Indicates support for variable length arrays. | extended | extended0x | c99vla |
__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. |
|
| __IBM_ATTRIBUTES | Indicates support for type, variable, and function attributes. |
|
| __IBM_COMPUTED_GOTO | Indicates support for computed goto statements. |
|
| __IBM_EXTENSION_KEYWORD | Indicates support for the __extension__ keyword. |
|
__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. |
|
| __IBM_LABEL_VALUE | Indicates support for labels as values. |
|
| __IBM_LOCAL_LABEL | Indicates support for local labels. |
|
| __IBM_MACRO_WITH_VA_ARGS | Indicates support for variadic macro extensions. |
|
__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. |
|
| __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. |
|
| __IBMC_NORETURN | Indicates support for the _Noreturn function specifier. |
|
__IBMC_STATIC_ASSERT |
Indicates support for the static assertions feature. | extc89 | extc99 | extended | extc1x |
__IBMCPP_AUTO_TYPEDEDUCTION |
Indicates support for the auto type deduction feature. | extended0x | autotypededuction |
__IBMCPP_C99_LONG_LONG |
Indicates support for the C99 long long feature. | extended0x | c99longlong |
__IBMCPP_C99_PREPROCESSOR |
Indicates support for the C99 preprocessor features adopted in the C++11 standard. | extended0x | c99preprocessor |
__IBMCPP_COMPLEX_INIT |
Indicates support for the initialization of complex types: float _Complex, double _Complex, and long double _Complex. | extended |
__IBMCPP_CONSTEXPR |
Indicates support for the generalized constant expressions feature. | extended0x | constexpr |
__IBMCPP_DECLTYPE |
Indicates support for the decltype feature. | extended0x | decltype |
__IBMCPP_DEFAULTED_AND_DELETED_FUNCTIONS |
Indicates support for the defaulted and deleted functions feature. | extended0x | defaultanddelete |
__IBMCPP_DELEGATING_CTORS |
Indicates support for the delegating constructors feature. | extended0x | delegatingctors |
__IBMCPP_EXPLICIT_CONVERSION_OPERATORS |
Indicates support for the explicit conversion operators feature. | extended0x | explicitconversionoperators |
__IBMCPP_EXTENDED_FRIEND |
Indicates support for the extended friend declarations feature. | extended0x | extendedfriend |
__IBMCPP_EXTERN_TEMPLATE |
Indicates support for the explicit instantiation declarations feature. | extended | extended0x | externtemplate |
__IBMCPP_INLINE_NAMESPACE |
Indicates support for the inline namespace definitions feature. | extended0x | inlinenamespace |
__IBMCPP_NULLPTR |
Indicates support for the nullptr feature. | extended0x | nullptr |
__IBMCPP_REFERENCE_COLLAPSING |
Indicates support for the reference collapsing feature. | extended0x | referencecollapsing |
__IBMCPP_RIGHT_ANGLE_BRACKET |
Indicates support for the right angle bracket feature. | extended0x | rightanglebracket |
__IBMCPP_RVALUE_REFERENCES |
Indicates support for the rvalue references feature. | extended0x | rvaluereferences |
__IBMCPP_SCOPED_ENUM |
Indicates support for the scoped enumeration feature. | extended0x | scopedenum |
__IBMCPP_STATIC_ASSERT |
Indicates support for the static assertions feature. |
|
__IBMCPP_VARIADIC_TEMPLATES |
Indicates support for the variadic templates feature. | extended0x | variadic[templates] |
| _LONG_LONG | Indicates support for long long data types. |
|
__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. |
|
| __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). |
|
__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.) |
__IBMC_STATIC_ASSERT
__IBMCPP_AUTO_TYPEDEDUCTION

