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 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. | stdc99 | extc99 | extc89 | extended |
__C99_COMPLEX | Indicates support for complex data types. | stdc99 | extc99 | extc89 | extended |
__C99_COMPLEX_HEADER__ | Indicates support for C99-style complex headers. | c99complexheader |
__C99_CPLUSCMT | Indicates support for C++ style comments | stdc99 | extc99 | stdc 89 | extc89 | extended (also -qcpluscmt) |
__C99_COMPOUND_LITERAL | Indicates support for compound literals. | stdc99 | extc99 | extc89 | extended extended | extended0x |
__C99_DESIGNATED_INITIALIZER | Indicates support for designated initialization. | stdc99 | extc99 | extc89 | extended |
__C99_DUP_TYPE_QUALIFIER | Indicates support for duplicated type qualifiers. | stdc99 | extc99 | extc89 | extended |
__C99_EMPTY_MACRO_ARGUMENTS | Indicates support for empty macro arguments. | stdc99 | extc99 | extc89 | extended |
__C99_FLEXIBLE_ARRAY_MEMBER | Indicates support for flexible array members. | stdc99 | extc99 | extc89 | extended |
__C99__FUNC__ | Indicates support for the __func__ predefined identifier. | stdc99 | extc99 | extc89 | extended extended | extended0x |c99__func__ |
__C99_HEX_FLOAT_CONST | Indicates support for hexadecimal floating constants. | stdc99 | extc99 | extc89 | extended extended | extended0x | c99hexfloat |
__C99_INLINE | Indicates support for the inline function specifier. | stdc99 | extc99 (also -qkeyword=inline) |
__C99_LLONG | Indicates support for C99-style long long data types and literals. | stdc99 | extc99 extended0x | c99longlong |
__C99_MACRO_WITH_VA_ARGS | Indicates support for function-like macros with variable arguments. | stdc99 | extc99 | extc89 | extended extended | extended0x | varargmacros |
__C99_MAX_LINE_NUMBER | Indicates that the maximum line number is 2147483647. | stdc99 | extc99 | extc89 | extended extended0x | c99preprocessor |
__C99_MIXED_DECL_AND_CODE | Indicates support for mixed declaration and code. | stdc99 | extc99 | extc89 | extended |
__C99_MIXED_STRING_CONCAT | Indicates support for concatenation of wide string and non-wide string literals. | stdc99 | extc99 | extc89 | extended extended0x | c99preprocessor |
__C99_NON_LVALUE_ARRAY_SUB | Indicates support for non-lvalue subscripts for arrays. | stdc99 | extc99 | extc89 | extended |
__C99_NON_CONST_AGGR_INITIALIZER | Indicates support for non-constant aggregate initializers. | stdc99 | extc99 | extc89 | extended |
__C99_PRAGMA_OPERATOR | Indicates support for the _Pragma operator. | stdc99 | extc99 | extc89 | extended extended extended0x |
__C99_REQUIRE_FUNC_DECL | Indicates that implicit function declaration is not supported. | stdc99 |
__C99_RESTRICT | Indicates support for the C99 restrict qualifier. | stdc99 | extc99 (also -qkeyword=restrict) extended | extended0x (also -qkeyword=restrict) |
__C99_STATIC_ARRAY_SIZE | Indicates support for the static keyword in array parameters to functions. | stdc99 | extc99 | extc89 | extended |
__C99_STD_PRAGMAS | Indicates support for standard pragmas. | stdc99 | extc99 | extc89 | extended |
__C99_TGMATH | Indicates support for type-generic macros in tgmath.h | stdc99 | extc99 | extc89 | extended |
__C99_UCN | Indicates support for universal character names. | stdc99 | extc99 | ucs ucs |
__C99_VAR_LEN_ARRAY | Indicates support for variable length arrays. | stdc99 | extc99 | extc89 | extended |
__C99_VARIABLE_LENGTH_ARRAY | Indicates support for variable length arrays. | extended | extended0x | c99vla |
__DIGRAPHS__ | Indicates support for digraphs. | stdc99 | extc99 | extc89 | extended (also -qdigraph) extended | extended0x | compat366 | strict98(also -qdigraph) |
__EXTENDED__ | Indicates that language extensions are supported. |
extended |
__IBM__ALIGN | Indicates support for the __align specifier. | Always defined except when -qnokeyword=__alignof is specified |
__IBM__ALIGNOF__ | Indicates support for the __alignof__ operator. | extc99 | extc89 | extended extended |
__IBM_ATTRIBUTES | Indicates support for type, variable, and function attributes. | extc99 | extc89 | extended extended | extended0x |
__IBM_COMPUTED_GOTO | Indicates support for computed goto statements. | extc99 | extc89 | extended extended | extended0x | gnu_computedgoto |
__IBM_EXTENSION_KEYWORD | Indicates support for the __extension__ keyword. | extc99 | extc89 | extended extended | extended0x | compat366 | strict98 |
__IBM_GCC__INLINE__ | Indicates support for the GCC __inline__ specifier. | extc99 | extc89 | extended |
__IBM_DOLLAR_IN_ID | Indicates support for dollar signs in identifiers. | extc99 | extc89 | extended |
__IBM_GENERALIZED_LVALUE | Indicates support for generalized lvalues. | extc99 | extc89 | extended |
__IBM_INCLUDE_NEXT | Indicates support for the #include_next preprocessing directive. | Always defined Always defined except when -qlanglvl=nognu_include_next is in effect. |
__IBM_LABEL_VALUE | Indicates support for labels as values. | extc99 | extc89 | extended extended | extended0x |gnu_labelvalue |
__IBM_LOCAL_LABEL | Indicates support for local labels. | extc99 | extc89 | extended extended | extended0x | gnu_locallabel |
__IBM_MACRO_WITH_VA_ARGS | Indicates support for variadic macro extensions. | extc99 | extc89 | extended extended | extended0x | gnu_varargmacros |
_IBM_NESTED_FUNCTION | Indicates support for nested functions. | extc99 | extc89 | extended |
__IBM_PP_PREDICATE | Indicates support for #assert, #unassert, #cpu, #machine, and #system preprocessing directives. | extc99 | extc89 | extended |
__IBM_PP_WARNING | Indicates support for the #warning preprocessing directive. | 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 extended | extended0x (Also -qkeyword=typeof) |
__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++0x standard. | extended0x | c99preprocessor |
__IBMCPP_DECLTYPE | Indicates support for the decltype feature. | extended0x | decltype |
__IBMCPP_DELEGATING_CTORS | Indicates support for the delegating constructors feature. | extended0x | delegatingctors |
__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_STATIC_ASSERT | Indicates support for the static assertions feature. | extended0x | static_assert |
__IBMCPP_VARIADIC_TEMPLATES | Indicates support for the variadic templates feature. | extended0x | variadic[templates] |
_LONG_LONG | Indicates support for long long data types. | stdc99 | extc99 | | stdc89 | extc89 | extended (also -qlonglong) extended0x | c99longlong | 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). | stdc99 | extc99 extended0x |
__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.) |