Vordefinierte Makros

 

Die neueste Dokumentation zu Visual Studio 2017 finden Sie unter Dokumentation zu Visual Studio 2017.

Visual C++-Compiler definiert bestimmte Präprozessormakros, je nach Sprache (C oder C++), das Kompilierungsziel und die ausgewählten Compileroptionen.

Visual C++ unterstützt die erforderlichen vordefinierten Präprozessormakros durch ANSI/ISO C99-Standard und der ISO C ++ 14-standard angegeben. Die Implementierung unterstützt auch mehrere weitere Microsoft-spezifische Präprozessormakros. Einige Makros werden nur für bestimmte Buildumgebungen oder Compileroptionen definiert. Sofern nicht angegeben, werden die Makros, die während einer Übersetzungseinheit definiert, als ob sie als angegeben wurden /d Argumente für Compiler-Option. Wenn definiert, werden die Makros vom Präprozessor vor der Kompilierung auf die angegebenen Werte erweitert. Die vordefinierten Makros akzeptieren keine Argumente und können nicht neu definiert werden.

Der Compiler unterstützt diese vordefinierten Bezeichner gemäß ISO C99 und ISO C ++ 11.

  • __func__ den unqualifizierten und nicht erweiterten Namen der einschließenden Funktion als eine Funktion lokalen static``const Array von char.

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

Der Compiler unterstützt diesen vordefinierten Makros, die durch den ISO C99 und ISO C ++ 14-Standards angegeben.

  • __cplusplus als literal Ganzzahl definiert werden, wenn der Übersetzungseinheit als C++ kompiliert wird. Andernfalls nicht definiert.

  • __DATE__ das kompilierungsdatum der aktuellen Quelldatei. Das Datum ist eine Konstante Länge Zeichenfolgenliteral des Formats Mmm Dd Yyyy. Der Name des Monats Mmm ist identisch mit der abgekürzte Name des Monats in Daten, die von der C-Laufzeitbibliothek generiert Asctime Funktion. Das erste Zeichen des Datums Dd ein Leerzeichen ist, wenn der Wert kleiner als 10 ist. Dieses Makro wird immer definiert.

  • __FILE__ den Namen der aktuellen Quelldatei. __FILE__ wird erweitert, um ein Zeichenfolgenliteral. Um sicherzustellen, dass der vollständige Pfad zur Datei angezeigt wird, verwenden /FC (vollständiger Pfad der Quellcodedatei in Diagnose). Dieses Makro wird immer definiert.

  • __LINE__ als ganze Zahl Zeilennummer in der aktuellen Quelldatei definiert. Der Wert des der __LINE__ Makro kann geändert werden, mithilfe einer #line Richtlinie. Dieses Makro wird immer definiert.

  • __STDC__ als 1 definiert wird, nur, wenn als C kompiliert und die /Za -Compileroption angegeben wird. Andernfalls nicht definiert.

  • __STDC_HOSTED__ als 1 definiert wird, ist die Implementierung einer gehostet Implementierung, eine, die die gesamte erforderliche Standardbibliothek unterstützt. Andernfalls definiert als 0.

  • __STDCPP_THREADS__ als 1 definiert wird, nur, wenn ein Programm mehrere Ausführungsthreads haben kann und als C++ kompiliert. Andernfalls nicht definiert.

  • __TIME__ die Uhrzeit der Übersetzung der vorverarbeiteten Übersetzungseinheit. Die Zeit ist eine Zeichenfolge Zeichenfolgenliteral des Formats hh: mm:, die von C-Laufzeitbibliothek zurückgegebene Uhrzeit identisch Asctime Funktion. Dieses Makro wird immer definiert.

Microsoft Visual C++ unterstützt diesen zusätzlichen vordefinierten Makros.

  • __ATOM__ als 1 bei definiert die /favor:ATOM (Compileroption) festgelegt ist und das compilerziel X86 oder X64. Andernfalls nicht definiert.

  • __AVX__ als 1 bei definiert die /arch: AVX oder /arch: avx2 Compileroptionen festgelegt und das compilerziel X86 oder X64. Andernfalls nicht definiert.

  • __AVX2__ als 1 bei definiert die /arch: avx2 (Compileroption) festgelegt ist und das compilerziel X86 oder X64. Andernfalls nicht definiert.

  • _CHAR_UNSIGNED definiert als 1, wenn der Standardwert char Typ ohne Vorzeichen ist. Dadurch wird festgelegt, wenn die /j (standardmäßig Typ unsigned Char) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • __CLR_VER als ein Ganzzahlliteral, das die Version der common Language Runtime zum Zeitpunkt der Kompilierung der Anwendung, definiert. Der Wert ist in der Form codiert Mmmbbbbb, wobei M die Hauptversion der Laufzeit mm ist die Nebenversionsnummer der Laufzeit und bbbbb die Buildnummer. __CLR_VER wird definiert, wenn die /CLR (Compileroption) festgelegt ist. Andernfalls nicht definiert.

    // clr_ver.cpp  
    // compile with: /clr  
    using namespace System;  
    int main() {  
       Console::WriteLine(__CLR_VER);  
    }  
    
    
  • _CONTROL_FLOW_GUARD als 1 bei definiert die /guard:cf (aktivieren Control Flow schützen) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • __COUNTER__ Expands ein Ganzzahlliteral, das bei 0 beginnt und jedes Mal, wenn sie in einer Quelldatei verwendet wird um 1 erhöht oder eingeschlossenen Headern der Quelldatei. __COUNTER__ speichert den Zustand beim Verwenden vorkompilierter Header. Dieses Makro wird immer definiert.

    Dieses Beispiel verwendet __COUNTER__ um eindeutige Bezeichner drei verschiedenen Objekten desselben Typs zuzuweisen. Die exampleClass Konstruktor akzeptiert eine ganze Zahl als Parameter. In main, die Anwendung drei Objekte des Typs deklariert exampleClass, wobei __COUNTER__ als eindeutigen Bezeichner-Parameter:

    // macro__COUNTER__.cpp  
    // Demonstration of __COUNTER__, assigns unique identifiers to  
    // different objects of the same type.  
    // Compile by using: cl /EHsc /W4 macro__COUNTER__.cpp  
    #include <stdio.h>  
    
    class exampleClass {  
        int m_nID;  
    public:  
        // initialize object with a read-only unique ID  
        exampleClass(int nID) : m_nID(nID) {}  
        int GetID(void) { return m_nID; }  
    };  
    
    int main()  
    {  
        // __COUNTER__ is initially defined as 0  
        exampleClass e1(__COUNTER__);  
    
        // On the second reference, __COUNTER__ is now defined as 1  
        exampleClass e2(__COUNTER__);  
    
        // __COUNTER__ is now defined as 2  
        exampleClass e3(__COUNTER__);  
    
        printf("e1 ID: %i\n", e1.GetID());  
        printf("e2 ID: %i\n", e2.GetID());  
        printf("e3 ID: %i\n", e3.GetID());  
    
        // Output  
        // ------------------------------  
        // e1 ID: 0  
        // e2 ID: 1  
        // e3 ID: 2  
    
        return 0;  
    }  
    
    
  • "__cplusplus_cli" als Integer-Literalwert 200406 bei Kompilierung als C++ definiert und die /CLR, /clr: pure, oder /clr: safe (Compileroption) festgelegt ist. Andernfalls nicht definiert. Wenn definiert, __cplusplus_cli ist während der Übersetzungseinheit wirksam.

    // cplusplus_cli.cpp  
    // compile by using /clr  
    #include "stdio.h"  
    int main() {  
       #ifdef __cplusplus_cli  
          printf("%d\n", __cplusplus_cli);  
       #else  
          printf("not defined\n");  
       #endif  
    }  
    
    
  • __cplusplus_winrt als Integer-Literalwert 201009 bei Kompilierung als C++ definiert und die /ZW (Windows-Runtime-Kompilierung) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _CPPRTTI definiert als 1, wenn die /GR (Enable Run-Time Type Information) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _CPPUNWIND als 1 definiert, wenn mindestens eine der /GX (Ausnahmebehandlung aktivieren), /CLR (Common Language Runtime-Kompilierung), oder /EH (Exception Handling Model) Compileroptionen festgelegt werden. Andernfalls nicht definiert.

  • _DEBUG definiert als 1 bei der "/ LDD", /MDd, oder /MTd (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _DLL definiert als 1 bei der /MD oder /MDd Compileroption (Multithreaded DLL) festgelegt ist. Andernfalls nicht definiert.

  • __FUNCDNAME__ definiert als ein Zeichenfolgenliteral, das enthält die ergänzten Namen der einschließenden Funktion. Das Makro wird nur innerhalb einer Funktion definiert. Die __FUNCDNAME__ Makro wird nicht erweitert, wenn Sie verwenden die /EP oder /p -Compileroption.

    Dieses Beispiel verwendet die __FUNCDNAME__, __FUNCSIG__, und __FUNCTION__ Makros um Funktionsinformationen anzuzeigen.

    // Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros
    void exampleFunction()
    {
    	printf("Function name: %s\n", __FUNCTION__);
    	printf("Decorated function name: %s\n", __FUNCDNAME__);
    	printf("Function signature: %s\n", __FUNCSIG__);
    	
    	// Sample Output
    	// -------------------------------------------------
    	// Function name: exampleFunction
    	// Decorated function name: ?exampleFunction@@YAXXZ
    	// Function signature: void __cdecl exampleFunction(void)
    }
    

  • __FUNCSIG__ definiert als ein Zeichenfolgenliteral, das die Signatur der einschließenden Funktion enthält. Das Makro wird nur innerhalb einer Funktion definiert. Die __FUNCSIG__ Makro wird nicht erweitert, wenn Sie verwenden die /EP oder /p -Compileroption. Wenn für ein 64-Bit-Ziel kompiliert wird, ist die Aufrufkonvention __cdecl standardmäßig. Ein Beispiel für die Verwendung, finden Sie unter der __FUNCDNAME__ Makro.

  • __FUNCTION__ definiert als ein Zeichenfolgenliteral, das den nicht ergänzten Namen der einschließenden Funktion enthält. Das Makro wird nur innerhalb einer Funktion definiert. Die __FUNCTION__ Makro wird nicht erweitert, wenn Sie verwenden die /EP oder /p -Compileroption. Ein Beispiel für die Verwendung, finden Sie unter der __FUNCDNAME__ Makro.

  • _INTEGRAL_MAX_BITS benutzerdefinierte literal Ganzzahlwert 64, die maximale Größe (in Bits) für einen ganzzahligen Typ mit nicht-Vektor. Dieses Makro wird immer definiert.

    // integral_max_bits.cpp  
    #include <stdio.h>  
    int main() {  
       printf("%d\n", _INTEGRAL_MAX_BITS);  
    }  
    
    
  • __INTELLISENSE__ definiert, wie 1, während ein IntelliSense-Compiler in Visual Studio-IDE übergeben. Andernfalls nicht definiert. Sie können dieses Makro verwenden, um Code zu schützen, die IntelliSense-Compiler nicht verstehen, oder verwenden, um das Umschalten zwischen der Build und die IntelliSense-Compiler. Weitere Informationen finden Sie unter Tipps zur Problembehandlung für IntelliSense Langsamkeit.

  • _ISO_VOLATILE definiert als 1, wenn die Sprachstandard (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _KERNEL_MODE definiert als 1, wenn die /Kernel (erstellen Kernel-Modus binär) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_AMD64 wie das Ganzzahlliteral Wert 100 für Kompilierungen, X64-Prozessoren definiert. Andernfalls nicht definiert.

  • _M_ARM definiert als die Integer-Literalwert 7 für Kompilierungen, ARM-Prozessoren abzielen. Andernfalls nicht definiert.

  • _M_ARM_ARMV7VE als 1 bei definiert die /arch: armv7ve Compileroption für Kompilierungen, die ARM-Prozessoren als Ziel festgelegt ist. Andernfalls nicht definiert.

  • _M_ARM_FP definiert ein Integer-literal-Wert, der gibt an /arch Compileroption wurde festgelegt, wenn das Kompilierungsziel ein ARM-Prozessor ist. Andernfalls nicht definiert.

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

    • Im Bereich 40-49, wenn /arch: vfpv4 festgelegt wurde.

    • Finden Sie unter /arch (ARM) für Weitere Informationen.

  • _M_ARM64 definiert als 1 für Kompilierungen, 64-Bit-ARM-Prozessoren abzielen. Andernfalls nicht definiert.

  • _M_CEE als definiert, 001 Wenn alle /CLR (Common Language Runtime-Kompilierung) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_CEE_PURE als definiert, wenn 001 der /clr: pure (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_CEE_SAFE als definiert, wenn 001 der /clr: safe (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_FP_EXCEPT definiert als 1, wenn die /fp: außer oder /fp: strict (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_FP_FAST definiert als 1, wenn die /fp: fast (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_FP_PRECISE definiert als 1, wenn die /fp: präzise (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_FP_STRICT definiert als 1, wenn die /fp: strict (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _M_IX86 wie das Ganzzahlliteral Wert von 600 für Kompilierungen, X86-Prozessoren definiert. Dieses Makro wird nicht für X64 oder ARM-Kompilierung Ziele definiert.

  • _M_IX86_FP definiert als ein Zeichenfolgenliteral Integer-Wert, der angibt der /arch -Compileroption, die Gruppe oder der Standard wurde. Dieses Makro wird immer definiert, wird das Kompilierungsziel einer X86 Prozessor. Andernfalls nicht definiert. Wenn definiert, lautet der Wert:

    • 0, wenn die /arch:IA32 (Compileroption) festgelegt wurde.

    • 1, wenn die neben (Compileroption) festgelegt wurde.

    • 2, wenn die /arch: SSE2, /arch: AVX oder /arch: avx2 (Compileroption) festgelegt wurde. Dieser Wert ist der Standardwert, wenn ein /arch Compileroption wurde nicht angegeben. Wenn /arch: AVX angegeben wird, das Makro __AVX__ ebenfalls definiert ist. Wenn /arch: avx2 angegeben wird, beide __AVX__ und __AVX2__ sind ebenfalls definiert.

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

  • _M_X64 wie das Ganzzahlliteral Wert 100 für Kompilierungen, X64-Prozessoren definiert. Andernfalls nicht definiert.

  • _MANAGED definiert als 1 bei der /CLR (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _MSC_BUILD definiert als ein Ganzzahlliteral, das die Revision Number-Element der Versionsnummer des Compilers enthält. Die Revisionsnummer ist das vierte Element der durch Punkte getrennten Versionsnummer. Die Versionsnummer des Visual C++-Compilers beispielsweise "15.00.20706.01" ist, die _MSC_BUILD -Makro in 1 ausgewertet. Dieses Makro wird immer definiert.

  • _MSC_EXTENSIONS definiert als 1, wenn die /Ze (Spracherweiterungen aktivieren) (Compileroption) festgelegt ist, wird die Standardeinstellung. Andernfalls nicht definiert.

  • _MSC_FULL_VER definiert als ein Ganzzahlliteral, die codiert die Hauptversionsnummer, Nebenversionsnummer und Buildnummer Anzahl Elemente der Versionsnummer des Compilers. Die Nummer der Hauptversion ist das erste Element der durch Punkte getrennten Versionsnummer und die Build-Nummer ist das dritte Element die Nummer die Nebenversion ist das zweite Element. Die Versionsnummer des Visual C++-Compilers beispielsweise "15.00.20706.01" ist, die _MSC_FULL_VER Makro ergibt 150020706 ausgewertet. Geben Sie cl /? in der Befehlszeile, um die Versionsnummer des Compilers anzuzeigen. Dieses Makro wird immer definiert.

  • _MSC_VER definiert als ein Ganzzahlliteral, das die Haupt- und Nebenversionsnummern Anzahl Elemente der Versionsnummer des Compilers codiert. Die Nummer der Hauptversion ist das erste Element der durch Punkte getrennten Versionsnummer und die Nebenversionsnummer ist das zweite Element. Die Versionsnummer des Visual C++-Compilers beispielsweise "17.00.51106.1" ist, die _MSC_VER Makro zu 1700 ausgewertet wird. Geben Sie cl /? in der Befehlszeile, um die Versionsnummer des Compilers anzuzeigen. Dieses Makro wird immer definiert.

  • _MSVC_LANG als ein Ganzzahlliteral, der angibt, den C++-Sprache-Standard der Compiler das Ziel definiert. Wenn als C++ kompiliert wird, ist das Makro der Integer-Literalwert 201402, wenn die /std:c ++ 14 Compileroption ist, oder indem und zu einer höheren festgelegt ist, nicht angegeben-Wert, wenn die /std:c ++ neueste (Compileroption) festgelegt ist. Andernfalls ist das Makro nicht definiert. Die _MSVC_LANG Makro und /std (Geben Sie standardmäßige Sprachversion) ab, die in Visual Studio 2015 Update 3 verfügbar sind.

  • __MSVC_RUNTIME_CHECKS definiert als 1, wenn eine von der /RTC Compileroptionen festgelegt ist. Andernfalls nicht definiert.

  • _MT definiert als 1 bei /MD oder/MDd (Multithreaded DLL) oder /MT oder/MTd (Multithreaded) angegeben wurde. Andernfalls nicht definiert.

  • _NATIVE_WCHAR_T_DEFINED definiert als 1 bei der /Zc: wchar_t (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _OPENMP als ganze Zahl literal 200203, das Datum der OpenMP-Spezifikation, die von Visual C++ implementierte darstellt, wenn die /OpenMP (Aktivieren der OpenMP 2.0-Unterstützung) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

    // _OPENMP_dir.cpp  
    // compile with: /openmp   
    #include <stdio.h>   
    int main() {  
       printf("%d\n", _OPENMP);  
    }  
    
    
  • _PREFAST_ als 1 bei definiert die / analyze (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • __TIMESTAMP__ definiert als ein Zeichenfolgenliteral, das Datum und Uhrzeit der letzten Änderung der aktuellen Quelldatei, in Form abgekürzten, Konstante Länge zurückgegeben, die von der C-Laufzeitbibliothek enthält Asctime Funktion, z. B. Fri 19 Aug 13:32:58 2016. Dieses Makro wird immer definiert.

  • _VC_NODEFAULTLIB definiert als 1 bei der /Zl (Omit Default Library Name) (Compileroption) festgelegt ist. Andernfalls nicht definiert.

  • _WCHAR_T_DEFINED definiert als 1 bei Standard /Zc: wchar_t (Compileroption) festgelegt ist. Die _WCHAR_T_DEFINED Makro definiert ist, aber keinen Wert besitzt, wenn die /Zc:wchar_t- (Compileroption) festgelegt ist, und wchar_t in einer systemheaderdatei in Ihrem Projekt definiert ist. Andernfalls nicht definiert.

  • _WIN32 definiert als 1 wird das Kompilierungsziel 32-Bit-ARM, 64-Bit-ARM X86, oder x 64. Andernfalls nicht definiert.

  • _WIN64 bei der Kompilierung Target 64-Bit-ARM oder X64 ist als 1 definiert. Andernfalls nicht definiert.

  • _WINRT_DLL definiert, wie C++ und sowohl als 1 bei kompiliert /ZW (Windows-Runtime-Kompilierung) und /ld oder "/ LDD" Compileroptionen festgelegt werden. Andernfalls nicht definiert.

Bestimmt die ATL- oder MFC-Bibliotheksversion Präprozessormakros werden vom Compiler nicht vordefiniert. Diese Makros werden in den Headern für die Bibliothek definiert, damit sie in den Präprozessordirektiven nicht definiert sind, bevor die erforderlichen Header enthalten ist.

  • _ATL_VER als ein Ganzzahlliteral, das die ATL-Versionsnummer codiert in < atldef.h > definiert.

  • _MFC_VER als ein Ganzzahlliteral, das die MFC-Versionsnummer codiert in < afxver_.h > definiert.

Makros (C/C++)
Präprozessor-Operatoren
Präprozessordirektiven

Anzeigen: