When the compiler is called with cc
, c11
, c89
or CC
, preprocessor macros and predicates are predefined, depending on the command and some options.
For a few macros the value is fixed. It cannot be changed, neither on the command line nor in the source (via #define
or #undef
). These macros are: __cplusplus
, __STDC__
, __STDC_VERSION__
and __SNI__STDCplusplus
.
Predefined preprocessor macros (defines)
_BOOL | In the language modes C++ V3, C++ 2017 and C++ 2020 with the option -K bool , which is the default |
| Always set |
| In all C++ language modes: == 1 in Cfront C++ mode |
| In all C++ language modes |
| In Cfront C++ mode |
| |
In the modes C++ V3, C++ 2017 and C++ 2020, if implicit inclusion has been disabled with the option | |
| Always set |
| Always set |
| Option |
| Always set |
| Always set |
| In mode C++ 2020: the compiler will set it to the value |
| |
Option | |
| |
Option | |
| Option |
| |
== 1 with the option | |
| Always set |
| Always set |
| Option |
| Option |
| Always set |
| In all C modes and in C++ V2 mode |
| Never set (reserved for compilation in BS2000 (SDF)) |
| Always set |
| Always set |
| in all C++ language modes: == 0 in extended language modes ( |
| Never set (reserved for compilation in BS2000 (SDF)) |
| Always set |
| Always set: == 0 in extended language modes ( |
| Always set |
| Always set |
| Always set |
| Always set |
| |
Always set == 8U | |
| Always set |
| Always set |
| Undefined in K&R C mode == 199409L in language modes C89, C++ V2, C++ V3 == 201112L in language modes C11, C++ 2017 and C++ 2020 |
| Undefined in K&R C mode == 199409L in language mode C89 and in all C++ language modes == 201112L in language mode C11 |
| in strict language modes ( |
| Option |
| Option |
| If called with |
Predefined preprocessor predicates (#assert)
| Always set |
| With /390 code generation |
| With /390 code generation |
| Always set |