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 LANGLVL
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.
| Predefined macro name | Description | Predefined when the following language level is in effect |
|---|---|---|
__ANSI__ |
Indicates that only language constructs that support the ISO C89 Standard are allowed. | ansi | stdc89 | stdc99 |
__BOOL__ |
Indicates that the bool keyword
is accepted. |
Always defined except when NOKEYWORD(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_CPLUSCMT |
Indicates support for C++ style comments | extc1x | stdc99 | extc99 | stdc89 | extc89 | extended (also SSCOM) |
| __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 |
| __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. |
extc1x | stdc99 | extc99 |
__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 | extc89
| extended |
__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 |
__COMMONC__ |
Indicates that language constructs defined by XPG are allowed. | commonc |
__COMPATMATH__ |
Indicates that the newer C++ function declarations are not to be introduced by the math.h header file. | oldmath |
| _EXT | Used in features.h to control the availability of extensions to the general ISO run-time libraries. | LIBEXT, or any LANGLVL suboption that implies it. (See the description of the LANGLVL option in the z/OS XL C/C++ User's Guide for a list of suboptions that imply LIBEXT.) |
| __EXTENDED__ | Indicates that language extensions are supported. |
extended |
| __IBM_COMPUTED_GOTO | Indicates support for computed goto statements. |
|
| __IBM_INCLUDE_NEXT | Indicates support for the #include_next preprocessing
directive. |
Always defined. |
| __IBM_LABEL_VALUE | Indicates support for labels as values. |
|
| __IBM__TYPEOF__ | Indicates support for the |
|
| __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_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. |
|
| _MI_BUILTIN | Indicates that the machine instruction built-in functions are available. | LIBEXT, or any LANGLVL suboption that implies it. (See the description of the LANGLVL option in the z/OS XL C/C++ User's Guide for a list of suboptions that imply LIBEXT.) |
__RESTRICT__ |
Indicates that the __restrict__ or __restrict keywords
are supported. |
Predefined at all language levels. |
__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 |
__IBMC_STATIC_ASSERT
__IBMCPP_AUTO_TYPEDEDUCTION