Vordefinierte Makros
Nach oben zu Der Präprozessor - Index
Der C++-Compiler definiert bestimmte globale Bezeichner, auch als manifeste Konstanten bezeichnet, vor. Die meisten globalen Bezeichner beginnen und enden mit zwei Unterstrichen (__).
- Hinweis: Zur besseren Lesbarkeit werden Unterstriche oft durch ein einzelnes Leerzeichen getrennt. Im Quelltext sollten Sie niemals Whitespace-Zeichen zwischen Unterstrichen verwenden.
Für Makros mit einem Wert der Form 0x0nnn
wird die Versionsnummer (nnn
) von der Versionsnummer der zugehörigen ausführbaren C++-Compiler-Datei festgelegt. Ab dem XE-Release können Sie die Versionsnummer mit der Option --version
für BCC32.EXE überprüfen.
Makro | Wert | Beschreibung |
---|---|---|
__ANDROID__ |
Nur in Compilern definiert, die eine plattformübergreifende Compilierung mit einem Android-Produkt als Zielplattform unterstützen: | |
__APPLE__ |
Nur in Compilern definiert, die eine plattformübergreifende Compilierung mit einem Apple-Produkt als Zielplattform unterstützen: | |
__arm__ |
Nur in Compilern definiert, die die plattformübergreifende Compilierung für die 32-Bit-ARM-Compiler-Architektur unterstützen: | |
__arm64__ |
Nur in Compilern definiert, die die plattformübergreifende Compilierung für die ARM64-Compiler-Architektur unterstützen: | |
__BCOPT__ |
1 |
Nur in Compilern definiert, die Optimierungen unterstützen; daher immer definiert. |
__BCPLUSPLUS__ |
Die Werte finden Sie im Abschnitt C++-Compiler-Versionen in diesem Thema. |
Ist definiert, wenn die C++-Compilierung gewählt wird; der Wert ist in späteren Versionen höher. |
__BOOL__ |
1 |
Gibt an, dass das Schlüsselwort bool akzeptiert wird. |
__BORLANDC__ |
Die Werte finden Sie im Abschnitt C++-Compiler-Versionen in diesem Thema. |
Versionsnummer |
__CDECL__ |
1 |
Ist definiert, wenn die Aufrufkonvention "cdecl" festgelegt ist; andernfalls nicht definiert. |
_CHAR_UNSIGNED |
1 |
Ist standardmäßig definiert. Dieses Makro wird bei Verwendung der Option -K definiert, damit das Standardzeichen vorzeichenlos ist. Die Option -K steuert, wie ein char beim Konvertieren in ein int erweitert wird. Standardmäßig erweitert der Compiler mit Vorzeichen, wenn Sie aber _CHAR_UNSIGNED_ aktivieren, erweitert der Compiler Zeichen beim Konvertieren in int mit null. |
__clang__ |
1 |
Definiert, wenn ein durch Clang erweiterter C++-Compiler verwendet wird. Siehe Clang Builtin Macros (EN). |
__CODEGEARC__ |
Die Werte finden Sie im Abschnitt C++-Compiler-Versionen in diesem Thema. |
Versionsnummer |
__CODEGEARC_VERSION__ |
|
Dieses interne Makro wird zu einem Integerwert erweitert, der die Hauptversion, die Nebenversion und eine interne Nummer verschlüsselt. Siehe Beispiel für das Makro __CODEGEARC_VERSION__. |
__CODEGUARD__ |
Ist definiert, wenn eine CodeGuard-Compiler-Option verwendet wird; andernfalls nicht definiert. | |
__CONSOLE__ |
1 |
Gibt an, dass es sich um eine Konsolenanwendung handelt. |
_CPPUNWIND |
1 |
Aktiviert die Stack-Abwicklung. Ist standardmäßig auf "true" gesetzt, kann mit -xd- deaktiviert werden. |
__cplusplus |
1 |
Ist im C++-Modus definiert; andernfalls nicht definiert. |
__DATE__ |
String-Literal |
Datum des Beginns der Verarbeitung der aktuellen Datei. |
__DLL__ |
1 |
Ist definiert, wenn die Compiler-Option -WD verwendet wird; andernfalls nicht definiert. |
__FILE__ |
String-Literal |
Name der aktuellen Datei, die gerade verarbeitet wird. |
__FLAT__ |
1 |
Wird beim Compilieren in einem 32-Bit-Speichermodell (flat) definiert. |
__FUNC__ oder __FUNCTION__ |
String-Literal |
Name der aktuellen Funktion, die gerade verarbeitet wird. Weitere Einzelheiten. |
__LINE__ |
Dezimale Konstante |
Nummer der Zeile der aktuellen Quelltextdatei, die gerade verarbeitet wird. |
__MACH__ |
Nur in Compilern definiert, die eine plattformübergreifende Compilierung mit MAC OS X als Ziel unterstützen. | |
_M_IX86 |
0x12c |
Ist immer definiert. Der Vorgabewert ist 300. Der Wert kann mit den Compiler-Optionen /4 oder /5 in 400 oder 500 geändert werden. |
__MT__ |
1 |
Nur definiert, wenn die Option -tWM verwendet wird. Legt fest, dass die Multithread-Bibliothek gelinkt werden soll. |
__PASCAL__ |
1 |
Ist definiert, wenn die Aufrufkonvention auf "Pascal" gesetzt ist; andernfalls nicht definiert. |
_PUSHPOP_SUPPORTED |
1 |
Ist immer definiert. Ermöglicht, dass Standard-Header von Microsoft mit "Push" und "Pop" überprüfen, ob eine Funktion unterstützt wird. |
_STDCALL_SUPPORTED |
1 |
Ist immer definiert. Definiert die Standardaufrufkonvention "stdcall" von Microsoft. |
__STDC__ |
1 |
Ist definiert, wenn mit der Compiler-Option -A compiliert wird, andernfalls nicht definiert. |
__TCPLUSPLUS__ |
Die Werte finden Sie im Abschnitt C++-Compiler-Versionen in diesem Thema. |
Versionsnummer |
__TEMPLATES__ |
1 |
Definiert als 1 für C++-Dateien ("templates" werden unterstützt), andernfalls nicht definiert. |
__TIME__ |
String-Literal |
Uhrzeit, zur die Verarbeitung der aktuellen Datei begonnen hat. |
__TLS__ |
1 |
Lokaler Thread-Speicher. Ist immer "true". |
__TURBOC__ |
Die Werte finden Sie im Abschnitt C++-Compiler-Versionen in diesem Thema. |
Der Wert ist in späteren Versionen höher. |
_UNICODE und UNICODE |
Definiert für C++-Programme, die die VCL verwenden. | |
_WCHAR_T |
Nur für C++-Programme definiert. Kennzeichnet wchar_t als intrinsisch definierten Datentyp. | |
_WCHAR_T_DEFINED |
Nur für C++-Programme definiert. Kennzeichnet wchar_t als intrinsisch definierten Datentyp. | |
_Windows |
1 |
Ist definiert, wenn die Compilierung auf einem Windows-Betriebssystem erfolgt. |
__WIN32__ |
1 |
Ist für Konsolen- und GUI-Anwendungen auf 32-Bit-Windows-Betriebssystemen definiert. |
_WIN64 |
1 |
Ist für Konsolen- und GUI-Anwendungen auf 64-Bit-Windows-Betriebssystemen definiert. |
- Hinweise:
- Die vordefinierten Makros __DATE__, __FILE__ , __FUNC__, __LINE__, __STDC__ und __TIME__ können nicht neu definiert oder deren Definition aufgehoben werden.
- Um die gesamte Liste der von C++-Compilern, die durch Clang erweitert wurden, unterstützten vordefinierten Makros zu überprüfen, siehe vordefinierte Makros.
C++-Compiler-Versionen in vordefinierten Makros
Die für den C++-Compiler definierten Makros (wie __CODEGEARC__) haben die folgenden Versionsnummern:
- 0x0570 für Developer Studio 2006.
- 0x0590 für C++Builder 2007.
- 0x0591 für Update 1 von C++Builder 2007.
- 0x0592 für RAD Studio 2007.
- 0x0593 für das Dezember-Update von RAD Studio 2007.
- 0x0610 für C++Builder 2009 und für C++Builder 2009 Update 1.
- 0x0620 für C++Builder 2010 und für C++Builder 2010 Update 1.
- 0x0621 für C++Builder 2010 Update 2.
- 0x0630 für C++Builder XE.
- 0x0631 für C++Builder XE Update 1.
- 0x0640 für C++Builder XE2.
- 0x0650 für C++Builder XE3 und C++Builder XE3 Update 1.
- 0x0651 für das Update vom Januar 2013 (BCC32 und BCCOSX); für BCC64 weiterhin 0x0650.
- 0x0660 für C++Builder XE4 (BCC32 und BCCOSX); für BCC64 weiterhin 0x0650.
- 0x0670 für C++Builder XE5 (BCC32, BCC64, BCCOSX und BCCIOSARM).
- 0x0680 für C++Builder XE6 (BCC32, BCC64, BCCOSX, BCCIOSARM und BCCAARM).
- 0x0690 für C++Builder XE7 (BCC32, BCC64, BCCOSX, BCCIOSARM und BCCAARM).
- 0x0700 für C++Builder XE8 (BCC32, BCC64, BCCOSX, BCCIOSARM, BCCIOSARM64 und BCCAARM).
- 0x0710 für C++Builder Seattle (BCC32C, BCC32, BCC64, BCCOSX, BCCIOSARM, BCCIOSARM64 und BCCAARM).
- 0x0711 für C++Builder Seattle Subscription Update 1 (BCC32); alle andere Compiler sind bei 0x0710 geblieben.
- 0x0720 für C++Builder Berlin (BCC32C, BCC32, BCC64, BCCOSX, BCCIOSARM, BCCIOSARM64 und BCCAARM).
Siehe auch Compiler-Versionen.
An anderen Stellen definierte Makros
Die folgenden Makros sind aus Gründen der Abwärtskompatibilität definiert, wenn Sie System.hpp einbeziehen (#include System.hpp
):
Makro | Wert | Beschreibung |
---|---|---|
ANSISTRING_AS_TEMPLATE |
Der AnsiString-Typ ist als "template"-Klasse definiert, AnsiString<T>. | |
_STRINGCHECKS_OFF |
In früheren Releases wurde von C++-Programmen erwartet, dass der Delphi-Compiler die Direktive STRINGCHECKS nicht festlegt. Der Delphi-Compiler unterstützt die Direktive STRINGCHECKS nicht mehr, daher ist das zugehörige C++-Makro _STRINGCHECKS_OFF C++ unnötig und wird nicht mehr festgelegt. Deshalb müssen Sie bei der Migration von Code aus einer Version vor 2009 in die aktuelle Version die Signatur der Ereignisbehandlungsroutinen aktualisieren (weil eine Ereignisbehandlungsroutine vor 2009 einen AnsiString erwartet, während die Laufzeit jetzt einen UnicodeString sendet). Siehe Unicode in RAD Studio. |