Freigeben über


Vordefinierte Makros

Damit werden die Präprozessormakros vordefinierter ANSI/ISO C99- und Microsoft C++-Implementierungen aufgelistet.

Vom Compiler werden vordefinierte ANSI/ISO C99 C-Präprozessormakros erkannt. Die Microsoft C++-Implementierung bietet weitere Makros. Von diesen Präprozessormakros werden keine Argumente akzeptiert. Sie können nicht neu definiert werden. Für einige der hier aufgeführten vordefinierten Makros sind mehrere Werte definiert.

ANSI-kompatible vordefinierte Makros

Makro

Beschreibung

__DATE__

Das Kompilierungsdatum der aktuellen Quelldatei. Das Datum ist ein Zeichenfolgenliteral des Formats Mmm dd yyyy. Der Monatsname Mmm ist derselbe wie für Daten, die von der in TIME.H deklarierten Bibliotheksfunktion asctime generiert wurden.

__FILE__

Der Name der aktuellen Quelldatei. __FILE__ wird auf ein Zeichenfolgenliteral erweitert. Um sicherzustellen, dass der vollständige Pfad zur Datei angezeigt wird, verwenden Sie /FC (Vollständiger Pfad der Quellcodedatei in Diagnostik).

__func__

Gibt den nicht qualifizierten und nicht verzierten Namen der einschließenden Funktion als ein Array von Zeichen zurück.

void Foo(){
printf("%s\n", __func__);
} // prints “Foo”

__LINE__

Die Zeilennummer in der aktuellen Quelldatei. Die Zeilennummer ist ein Ganzzahlliteral im Dezimalformat. Sie kann durch eine #line-Direktive geändert werden.

__STDC__

Kennzeichnet die Übereinstimmung mit dem Standard ANSI/ISO C99. Ist nur dann als Ganzzahlliteralkonstante 1 definiert, wenn die Compileroption /Za angegeben ist und Sie keinen C++-Code kompilieren. Andernfalls ist der Wert nicht definiert.

__TIME__

Die aktuellste Kompilierungszeit der aktuellen Quelldatei. Die Zeit ist ein Zeichenfolgenliteral des Formats hh:mm:ss.

__TIMESTAMP__

Das Datum und die Uhrzeit der letzten Änderung der aktuellen Quelldatei, ausgedrückt als Zeichenfolgenliteral im Format Ddd Mmm Date hh:mm:ss yyyy, wobei Ddd für den abgekürzten Wochentag steht und Date für eine ganze Zahl zwischen 1 und 31.

Microsoft-spezifische vordefinierte Makros

Makro

Beschreibung

_ATL_VER

Definiert die ATL-Version, die als Ganzzahlliteral codiert ist.

__AVX__

Definiert, wenn /arch:AVX oder /arch:AVX2 angegeben ist.

__AVX2__

Definiert, wenn /arch:AVX2 angegeben ist.

_CHAR_UNSIGNED

Der Standardzeichentyp (char) ist nicht signiert. Definiert, wenn /J angegeben ist.

__CLR_VER

Definiert die verwendete Version der Common Language Runtime zum Zeitpunkt der Kompilierung der Anwendung. Der zurückgegebene Wert ein Ganzzahlliteral, das im folgenden Format codiert ist:

Mmmbbbbb

wobei

  • M die Hauptversion der Laufzeit ist

  • mm die Nebenversion der Laufzeit ist

  • bbbbb die Buildnummer ist

// clr_ver.cpp
// compile with: /clr
using namespace System;
int main() {
   Console::WriteLine(__CLR_VER);
}

__cplusplus_cli

Wird definiert beim Kompilieren mit /clr, /clr:pure oder /clr:safe. Wert von "__cplusplus_cli" ist das Ganzzahlliteral 200406. "__cplusplus_cli" ist während der Übersetzungseinheit wirksam.

// cplusplus_cli.cpp
// compile with: /clr
#include "stdio.h"
int main() {
   #ifdef __cplusplus_cli
      printf("%d\n", __cplusplus_cli);
   #else
      printf("not defined\n");
   #endif
}

__cplusplus_winrt

Wird definiert beim Kompilieren mit der Option /ZW. Der Wert von "__cplusplus_winrt" ist das Ganzzahlliteral 201009.

__COUNTER__

Wird auf ein Ganzzahlliteral beginnend mit 0 erweitert und jedes Mal um 1 erhöht, wenn es in einer Quelldatei oder in den eingeschlossenen Headern der Quelldatei verwendet wird. __COUNTER__ speichert den Zustand beim Verwenden vorkompilierter Header.

Im folgenden Beispiel wird __COUNTER__ verwendet, um eindeutige Bezeichner drei verschiedenen Objekten desselben Typs zuzuweisen.

Gehen wir zunächst von der folgenden Klassendefinition aus. Der Konstruktor akzeptiert eine ganze Zahl als Parameter.

In der Hauptversion werden mit der Anwendung drei Objekte des Typs exampleClass deklariert, wobei __COUNTER__ als eindeutiger Bezeichnerparameter verwendet wird.

__cplusplus

Ist nur für C++-Programme definiert.

_CPPRTTI

Definiert für Code, der mit /GR kompiliert wurde (Laufzeittypinfo aktivieren).

_CPPUNWIND

Definiert für Code, der mithilfe eines der /EH (Ausnahmebehandlungsmodell)-Flags kompiliert wurde.

_DEBUG

Wird definiert beim Kompilieren mit /LDd, /MDd und /MTd.

_DLL

Definiert, wenn /MD oder /MDd (Multithreaded DLL) angegeben wird.

__FUNCDNAME__

Nur in einer Funktion gültig. Definiert den ergänzten Namen der einschließenden Funktion als Zeichenfolgenliteral.

__FUNCDNAME__ wird nicht erweitert, wenn Sie die Compileroption /EP oder /P verwenden.

Im folgenden Beispiel werden die Makros __FUNCDNAME__, __FUNCSIG__ und __FUNCTION__ verwendet, um Funktionsinformationen anzuzeigen.

__FUNCSIG__

Nur in einer Funktion gültig. Definiert die Signatur der einschließenden Funktion als Zeichenfolgenliteral.

__FUNCSIG__ wird nicht erweitert, wenn Sie die Compileroption /EP oder /P verwenden.

Unter einem 64-Bit-Betriebssystem ist die Aufrufkonvention standardmäßig __cdecl.

Ein Beispiel finden Sie unter __FUNCDNAME__.

__FUNCTION__

Nur in einer Funktion gültig. Definiert den nicht ergänzten Namen der einschließenden Funktion als Zeichenfolgenliteral.

__FUNCTION__ wird nicht erweitert, wenn Sie die Compileroption /EP oder /P verwenden.

Ein Beispiel finden Sie unter __FUNCDNAME__.

_INTEGRAL_MAX_BITS

Meldet die maximale Größe (in Bit) für einen Integraltyp als Ganzzahlliteral.

// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d\n", _INTEGRAL_MAX_BITS);
}

_M_AMD64

Definiert für Kompilierungen, die auf x64-Prozessoren abzielen.

_M_ARM

Definiert für Kompilierungen, die auf ARM-Prozessoren abzielen.

_M_CEE

Definiert für eine Kompilierung, die jede Form von /clr verwendet (z. B. /clr:oldSyntax, /clr:safe).

_M_CEE_PURE

Definiert für eine Kompilierung, die /clr:pure verwendet.

_M_CEE_SAFE

Definiert für eine Kompilierung, die /clr:safe verwendet.

_M_IX86

Definiert für Kompilierungen, die auf x86-Prozessoren abzielen. Wird nicht für x64-Prozessoren definiert.

_M_ARM_FP

Wird auf einen Ganzzahlliteralwert erweitert, der angibt, welche /arch-Compileroption verwendet wurde:

  • Im Bereich 30-39 ohne Festlegung einer /arch ARM-Option wird angegeben, dass die standardmäßige Architektur für ARM verwendet wurde (VFPv3).

  • Im Bereich 40-49, wenn /arch:VFPv4 verwendet wurde.

  • Weitere Informationen finden Sie unter /arch (x86).

_M_IX86_FP

Wird auf einen Ganzzahlliteralwert erweitert, der angibt, welche /arch-Compileroption verwendet wurde:

  • 0, wenn /arch:IA32 verwendet wurde.

  • 1, wenn /arch:SSE verwendet wurde.

  • 2, wenn /arch:SSE2, /arch:AVX oder /arch:AVX2 verwendet wurde. Dies ist der Standardwert, wenn /arch nicht angegeben wurde. Bei Angabe von /arch:AVX wird auch das Makro __AVX__ definiert. Wenn /arch:AVX2 angegeben ist, sind __AVX__ und __AVX2__ ebenfalls definiert.

  • Weitere Informationen finden Sie unter /arch (x86).

_M_X64

Definiert für Kompilierungen, die auf x64-Prozessoren abzielen.

_MANAGED

Definiert, dass dieser Wert "1" ist, wenn /clr angegeben wurde.

_MFC_VER

Definiert die MFC-Version, die als Ganzzahlliteral codiert ist.

_MSC_BUILD

Ergibt ein Ganzzahlliteral, das die Revisionskomponente der Versionsnummer des Compilers enthält. Die Revisionsnummer ist die vierte Komponente der durch Punkte getrennten Versionsnummer. Wenn die Versionsnummer des Visual C++-Compilers beispielsweise "15.00.20706.01" ist, wird das _MSC_BUILD-Makro in 1 ausgewertet.

_MSC_EXTENSIONS

Dieses Makro wird definiert, wenn Sie mit der Compileroption /Ze kompilieren (Standardeinstellung). Der Wert, wenn er definiert wurde, ist "1".

_MSC_FULL_VER

Ergibt ein Ganzzahlliteral, das die Komponenten "Hauptversion", "Nebenversion" und "Buildnummer" der Versionsnummer des Compilers codiert. Die Nummer der Hauptversion ist die erste Komponente der durch Punkte getrennten Versionsnummer, die Nummer der Nebenversion die zweite Komponente und die Buildnummer die dritte Komponente. Wenn die Versionsnummer des Visual C++-Compilers beispielsweise "15.00.20706.01" ist, wird das _MSC_FULL_VER-Makro in 150020706 ausgewertet. Geben Sie cl /? an der Befehlszeile ein, um die Versionsnummer des Compilers anzuzeigen.

_MSC_VER

Ergibt ein Ganzzahlliteral, das die Komponenten "Hauptversion" und "Nebenversion" der Versionsnummer des Compilers codiert. Die Nummer der Hauptversion ist die erste Komponente der durch Punkte getrennten Versionsnummer und die Nummer der Nebenversion die zweite Komponente.

Wenn die Versionsnummer des Visual C++-Compilers beispielsweise "17.00.51106.1" ist, wird das _MSC_VER-Makro in 1700 ausgewertet. Geben Sie cl /? an der Befehlszeile ein, um die Versionsnummer des Compilers anzuzeigen.

__MSVC_RUNTIME_CHECKS

Definiert, wenn eine der /RTC-Compileroptionen angegeben wird.

_MT

Definiert, wenn /MD oder /MDd (Multithreaded DLL) oder /MT oder /MTd (Multithreaded) angegeben wurde.

_NATIVE_WCHAR_T_DEFINED

Definiert, wenn /Zc:wchar_t verwendet wird.

_OPENMP

Wird beim Kompilieren mit „/openmp“ definiert. Es wird als ein Ganzzahlliteral ausgewertet, das für das Datum der OpenMP-Spezifikation steht, die mit Visual C++ implementiert wurde.

// _OPENMP_dir.cpp
// compile with: /openmp 
#include <stdio.h> 
int main() {
   printf("%d\n", _OPENMP);
}

_VC_NODEFAULTLIB

Definiert, wenn /Zl verwendet wird. Unter /Zl (Kein Standardbibliotheksname) finden Sie weitere Informationen.

_WCHAR_T_DEFINED

Definiert, wenn /Zc:wchar_t verwendet wird oder wenn "wchar_t" in einer Systemheaderdatei definiert wurde, die im Projekt enthalten ist.

_WIN32

Definiert für Anwendungen für Win32 und Win64. Immer definiert.

_WIN64

Definiert für Anwendungen für Win64.

Siehe auch

Referenz

Makros (C/C++)

Präprozessoroperatoren

Präprozessordirektiven