Vordefinierte Makros

Aus RAD Studio
Wechseln zu: Navigation, Suche

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__

  • Für die Hauptversionsnummer werden die Bits 31..24 verwendet.
  • Für die Nebenversionsnummer werden die Bits 23..16 verwendet.
  • Für die interne Versionsnummer werden die Bits 15..0 verwendet.

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
(wird nicht mehr unterstützt)

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.

Siehe auch