Predefined Macros
Go Up to The Preprocessor Index
The C++ compiler predefines certain global identifiers, known as manifest constants. Most global identifiers begin and end with two underscores (__).
- Note: For readability, underscores are often separated by a single blank space. In your source code, you should never insert whitespace between underscores.
For macros whose value takes the form of 0x0nnn
, the version number (nnn
) is determined by the version number of the associated C++ compiler executable. Beginning with the XE release, you can verify the version number using the --version
option to BCC32.EXE.
Macro | Value | Description |
---|---|---|
__ANDROID__ |
Defined only in compilers that support cross compiling with an Android product as the target platform: | |
__APPLE__ |
Defined only in compilers that support cross compiling with an Apple product as the target platform: | |
__arm__ |
Defined only in compilers that support cross compiling for the 32-bit ARM compiler architecture: | |
__arm64__ |
Defined only in compilers that support cross compiling for the ARM64 compiler architecture: | |
__BCOPT__ |
1 |
Defined only in compilers that support optimization, therefore always defined. |
__BCPLUSPLUS__ |
Values are listed in C++ Compiler Versions in this topic. |
Defined if you've selected C++ compilation; will increase in later releases. |
__BOOL__ |
1 |
Indicates that the bool keyword is accepted. |
__BORLANDC__ |
Values are listed in C++ Compiler Versions in this topic. |
Version number. |
__CDECL__ |
1 |
Defined if Calling Convention is set to cdecl; otherwise undefined. |
_CHAR_UNSIGNED |
1 |
Undefined by default. Using the -K switch to make the default character unsigned causes this macro to be defined. Ultimately, the -K option controls how a char is extended when converted to an int. By default, the compiler sign-extends, but if you enable _CHAR_UNSIGNED_, then the compiler zero-extends characters when converting to int. |
__clang__ |
1 |
Defined if a Clang-enhanced C++ compiler is in use. See Clang Builtin Macros. |
__CODEGEARC__ |
Values are listed in C++ Compiler Versions and in this topic. |
Version number. |
__CODEGEARC_VERSION__ |
|
This internal macro expands to an integer that encodes the major version of the compiler, minor version, and an internal number. See Example of __CODEGEARC_VERSION__ Macro. |
__CODEGUARD__ |
Defined whenever one of the CodeGuard compiler options is used; otherwise it is undefined. | |
__CONSOLE__ |
1 |
When defined, the macro indicates that the program is a console application. |
_CPPUNWIND |
1 |
Enable stack unwinding. This is true by default; use -xd-!ALink(OSCGExceptions1) to disable. |
__cplusplus |
1 |
Defined if in C++ mode; otherwise, undefined. |
__DATE__ |
String literal |
Date when processing began on the current file. |
__DLL__ |
1 |
Defined whenever the -WD compiler option is used; otherwise it is undefined. |
__FILE__ |
String literal |
Name of the current file being processed. |
__FLAT__ |
1 |
Defined when compiling in 32-bit flat memory model. |
__FUNC__ or __FUNCTION__ |
String literal |
Name of the current function being processed. More details. |
__LINE__ |
Decimal constant |
Number of the current source file line being processed. |
__MACH__ |
Defined only in compilers that support cross compiling with a target of MAC OSX. | |
_M_IX86 |
0x12c |
Always defined. The default value is 300. You can change the value to 400 or 500 by using the /4 or /5 compiler options. |
__MT__ |
1 |
Defined only if the -tWM option is used. It specifies that the multithread library is to be linked. |
__PASCAL__ |
1 |
Defined if Calling Convention is set to Pascal; otherwise undefined. |
_PUSHPOP_SUPPORTED |
1 |
Always defined; allows Microsoft standard headers to use push and pop to verify whether a feature is supported. |
_STDCALL_SUPPORTED |
1 |
Always defined; defines the Microsoft stdcall calling convention. |
__STDC__ |
1 |
Defined if you compile with the -A compiler option; otherwise, it is undefined. |
__TCPLUSPLUS__ |
Values are listed in C++ Compiler Versions in this topic. |
Version number. |
__TEMPLATES__ |
1 |
Defined as 1 for C++ files (meaning that templates are supported); otherwise, it is undefined. |
__TIME__ |
String literal |
Time when processing began on the current file. |
__TLS__ |
1 |
Thread Local Storage. Always true. |
__TURBOC__ |
Values are listed in C++ Compiler Versions and in this topic. |
Will increase in later releases. |
_UNICODE and UNICODE |
Defined for C++ programs that use the VCL. | |
_WCHAR_T |
Defined only for C++ programs to indicate that wchar_t is an intrinsically defined data type. | |
_WCHAR_T_DEFINED |
Defined only for C++ programs to indicate that wchar_t is an intrinsically defined data type. | |
_Windows |
1 |
Defined when compiling on the Windows platform. |
__WIN32__ |
1 |
Defined for console and GUI applications on the 32-bit Windows platform. |
_WIN64 |
1 |
Defined for console and GUI applications on the 64-bit Windows platform. |
- Notes:
- The predefined macros __DATE__, __FILE__ , __FUNC__, __LINE__, __STDC__, and __TIME__ cannot be redefined or undefined.
- In order to check the entire list of predefined macros supported by Clang-enhanced C++ compilers, see predefined macros.
C++ Compiler Versions in Predefined Macros
The macros defined for the C++ compiler (such as __CODEGEARC__) have the following version numbers:
- 0x0570 for Developer Studio 2006.
- 0x0590 for C++Builder 2007.
- 0x0591 for update 1 to C++Builder 2007.
- 0x0592 for RAD Studio 2007.
- 0x0593 for the December update to RAD Studio 2007.
- 0x0610 for C++Builder 2009 and for C++Builder 2009 Update 1.
- 0x0620 for C++Builder 2010 and for C++Builder 2010 Update 1.
- 0x0621 for C++Builder 2010 Update 2.
- 0x0630 for C++Builder XE.
- 0x0631 for C++Builder XE Update 1.
- 0x0640 for C++Builder XE2.
- 0x0650 for C++Builder XE3 and C++Builder XE3 Update 1.
- 0x0651 for January 2013 update (BCC32 and BCCOSX); BCC64 remained at 0x0650.
- 0x0660 for C++Builder XE4 (BCC32 and BCCOSX); BCC64 remained at 0x0650.
- 0x0670 for C++Builder XE5 (BCC32, BCC64, BCCOSX, and BCCIOSARM).
- 0x0680 for C++Builder XE6 (BCC32, BCC64, BCCOSX, BCCIOSARM, and BCCAARM).
- 0x0690 for C++Builder XE7 (BCC32, BCC64, BCCOSX, BCCIOSARM, and BCCAARM).
- 0x0700 for C++Builder XE8 (BCC32, BCC64, BCCOSX, BCCIOSARM, BCCIOSARM64, and BCCAARM).
- 0x0710 for C++Builder Seattle (BCC32C, BCC32, BCC64, BCCOSX, BCCIOSARM, BCCIOSARM64, and BCCAARM).
- 0x0711 for C++Builder Seattle Subscription Update 1 (BCC32); other compilers remained at 0x0710.
- 0x0720 for C++Builder Berlin (BCC32C, BCC32, BCC64, BCCOSX, BCCIOSARM, BCCIOSARM64, and BCCAARM).
See also Compiler Versions.
Macros Defined Elsewhere
The following macros are defined for backwards-compatibility when you #include System.hpp
:
Macro | Value | Description |
---|---|---|
ANSISTRING_AS_TEMPLATE |
AnsiString type is defined as a template class, AnsiString<T>. | |
_STRINGCHECKS_OFF |
In past releases, C++ programs expected the Delphi compiler to not set the STRINGCHECKS directive. The Delphi compiler no longer supports the STRINGCHECKS directive, so the related _STRINGCHECKS_OFF C++ macro is unnecessary and is no longer set. Therefore if you are migrating pre-2009 code to the current version, you need to update the event-handler signature (because a pre-2009 event handler expects AnsiString, while the run time now sends UnicodeString). See Unicode in RAD Studio. |