Delen via


Vooraf gedefinieerde macro's

De Microsoft C/C++-compiler (MSVC) vooraf gedefinieerde vooraf gedefinieerde preprocessormacro's, afhankelijk van de taal (C of C++), het compilatiedoel en de gekozen compileropties.

MSVC ondersteunt de vooraf gedefinieerde preprocessormacro's die vereist zijn voor de ANSI-/ISO C99-, C11- en C17-standaarden, en de ISO C++14-, C++17- en C++20-standaarden. De implementatie ondersteunt ook nog een aantal specifiekere macro's voor de preprocessor van Microsoft.

Sommige macro's worden alleen gedefinieerd voor specifieke buildomgevingen of compileropties. Behalve waar vermeld, worden de macro's in een vertaaleenheid gedefinieerd alsof ze zijn opgegeven als /D argumenten voor compileropties. Wanneer de preprocessor is gedefinieerd, worden macro's van de opgegeven waarden uitgebreid voordat ze worden gecompileerd. De vooraf gedefinieerde macro's hebben geen argumenten en kunnen niet opnieuw worden gedefinieerd.

Vooraf gedefinieerde standaard-id

De compiler ondersteunt deze vooraf gedefinieerde id die is opgegeven door ISO C99 en ISO C++11.

  • __func__ De niet-gekwalificeerde en niet-schattige naam van de omsluitfunctie als een functie-lokale statische constmatrix van char.

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

Standaard vooraf gedefinieerde macro's

De compiler ondersteunt deze vooraf gedefinieerde macro's die zijn opgegeven door de ISO C99-, C11-, C17- en ISO C++17-standaarden.

  • __cplusplus Gedefinieerd als een letterlijke waarde voor een geheel getal wanneer de vertaaleenheid wordt gecompileerd als C++. Anders, niet gedefinieerd.

  • __DATE__ De compilatiedatum van het huidige bronbestand. De datum is een letterlijke tekenreeks met een constante lengte van de notatie Mmm dd jjjj. De maandnaam Mmm is hetzelfde als de verkorte maandnaam die is gegenereerd door de C Runtime Library (CRT) asctime-functie . Het eerste teken van datum dd is een spatie als de waarde kleiner is dan 10. Deze macro is altijd gedefinieerd.

  • __FILE__ De naam van het huidige bronbestand. __FILE__ wordt uitgebreid naar een letterlijke tekenreeks. Gebruik (volledig pad naar broncodebestand in Diagnostische gegevens) om ervoor te zorgen dat het volledige pad naar het bestand wordt weergegeven/FC. Deze macro is altijd gedefinieerd.

  • __LINE__ Gedefinieerd als het regelnummer voor gehele getallen in het huidige bronbestand. De waarde van deze macro kan worden gewijzigd met behulp van een #line instructie. Het integrale type waarde van de waarde __LINE__ kan variëren, afhankelijk van de context. Deze macro is altijd gedefinieerd.

  • __STDC__ Gedefinieerd als 1 als gecompileerd als C en als de /Za compileroptie is opgegeven. Vanaf Visual Studio 2022 versie 17.2 wordt deze gedefinieerd als 1 wanneer deze is gecompileerd als C en of de /Zc:__STDC__ compileroptie is opgegeven. Anders, niet gedefinieerd.

  • __STDC_HOSTED__ Gedefinieerd als 1 als de implementatie een gehoste implementatie is, een implementatie die de volledige vereiste standaardbibliotheek ondersteunt. Anders gedefinieerd als 0.

  • __STDC_NO_ATOMICS__ Gedefinieerd als 1 als de implementatie geen ondersteuning biedt voor optionele standaard atomics. De MSVC-implementatie definieert deze als 1 wanneer deze is gecompileerd als C en een van de /std C11- of C17-opties is opgegeven.

  • __STDC_NO_COMPLEX__ Gedefinieerd als 1 als de implementatie geen ondersteuning biedt voor optionele complexe standaardnummers. De MSVC-implementatie definieert deze als 1 wanneer deze is gecompileerd als C en een van de /std C11- of C17-opties is opgegeven.

  • __STDC_NO_THREADS__ Gedefinieerd als 1 als de implementatie geen ondersteuning biedt voor optionele standaardthreads. De MSVC-implementatie definieert deze als 1 wanneer deze is gecompileerd als C en een van de /std C11- of C17-opties is opgegeven.

  • __STDC_NO_VLA__ Gedefinieerd als 1 als de implementatie geen ondersteuning biedt voor standaardvariabelelengtematrices. De MSVC-implementatie definieert deze als 1 wanneer deze is gecompileerd als C en een van de /std C11- of C17-opties is opgegeven.

  • __STDC_VERSION__ Gedefinieerd als gecompileerd als C en een van de /std C11- of C17-opties is opgegeven. Het breidt uit naar 201112L voor /std:c11, en 201710L voor /std:c17.

  • __STDCPP_DEFAULT_NEW_ALIGNMENT__Wanneer /std:c17 of later is opgegeven, wordt deze macro uitgebreid naar een size_t letterlijke waarde die de waarde heeft van de uitlijning die wordt gegarandeerd door een aanroep naar uitlijnings-niet.operator new Grotere uitlijningen worden doorgegeven aan een uitlijningsbewuste overbelasting, zoals operator new(std::size_t, std::align_val_t). Zie /Zc:alignedNew (C++17 over-uitgelijnde toewijzing) voor meer informatie.

  • __STDCPP_THREADS__ Gedefinieerd als 1 als en alleen als een programma meer dan één thread van uitvoering kan hebben en als C++kan worden gecompileerd. Anders, niet gedefinieerd.

  • __TIME__ De tijd van de vertaling van de vooraf verwerkte vertaaleenheid. De tijd is een letterlijke tekenreeks van het formulier uu:mm:ss, hetzelfde als de tijd die wordt geretourneerd door de functie CRT asctime . Deze macro is altijd gedefinieerd.

Microsoft-specifieke vooraf gedefinieerde macro's

MSVC ondersteunt andere vooraf gedefinieerde macro's:

  • __ARM_ARCH Gedefinieerd als een letterlijk geheel getal dat de ARM-architectuurversie vertegenwoordigt. De waarde wordt gedefinieerd als 8 voor de Armv8-A-architectuur. Voor 8.1 en hoger wordt de waarde geschaald voor secundaire versies, zoals X.Y, met behulp van de formule X * 100 + Y zoals gedefinieerd door de ARM C-taalextensie. Voor Armv8.1 __ARM_ARCH is bijvoorbeeld 8 * 100 + 1 of 801. Als u de VERSIE van de ARM-architectuur wilt instellen, raadpleegt u /arch (ARM64). Deze macro is geïntroduceerd in Visual Studio 2022 versie 17.10.

  • __ATOM__ Gedefinieerd als 1 wanneer de /favor:ATOM compileroptie is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX__Gedefinieerd als 1 wanneer de opties voor /arch:AVX10.2/arch:AVX10.1/arch:AVX512de /arch:AVXcompiler /arch:AVX2zijn ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX2__Gedefinieerd als 1 wanneer de /arch:AVX2optie , /arch:AVX512/arch:AVX10.1of /arch:AVX10.2 compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX512BW__ Gedefinieerd als 1 wanneer de /arch:AVX512optie , /arch:AVX10.1of /arch:AVX10.2 compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX512CD__ Gedefinieerd als 1 wanneer de /arch:AVX512optie , /arch:AVX10.1of /arch:AVX10.2 compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX512DQ__ Gedefinieerd als 1 wanneer de /arch:AVX512optie , /arch:AVX10.1of /arch:AVX10.2 compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX512F__ Gedefinieerd als 1 wanneer de /arch:AVX512optie , /arch:AVX10.1of /arch:AVX10.2 compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX512VL__ Gedefinieerd als 1 wanneer de /arch:AVX512optie , /arch:AVX10.1of /arch:AVX10.2 compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • __AVX10_VER__ Gedefinieerd als een geheel getal dat de versie van AVX10 vertegenwoordigt wanneer de /arch:AVX10.1 optie of /arch:AVX10.2 compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd.

  • _CHAR_UNSIGNED Gedefinieerd als 1 als het standaardtype char niet is ondertekend. Deze waarde wordt gedefinieerd wanneer de /J compileroptie (Standaard tekentype is niet-ondertekend) is ingesteld. Anders, niet gedefinieerd.

  • __CLR_VER Gedefinieerd als een letterlijk geheel getal dat de versie van common language runtime (CLR) vertegenwoordigt die wordt gebruikt om de app te compileren. De waarde wordt gecodeerd in de vorm Mmmbbbbb, waarbij M de primaire versie van de runtime is, mm de secundaire versie van de runtime is en bbbbb het buildnummer. __CLR_VER is gedefinieerd als de /clr compileroptie is ingesteld. Anders, niet gedefinieerd.

    // clr_ver.cpp
    // compile with: /clr
    using namespace System;
    int main() {
       Console::WriteLine(__CLR_VER);
    }
    
  • _CONTROL_FLOW_GUARD Gedefinieerd als 1 wanneer de /guard:cf compileroptie (Control Flow Guard inschakelen) is ingesteld. Anders, niet gedefinieerd.

  • __COUNTER__ Breidt uit naar een letterlijk geheel getal dat begint bij 0. De waarde wordt steeds verhoogd met 1 wanneer deze wordt gebruikt in een bronbestand of in opgenomen headers van het bronbestand. __COUNTER__ onthoudt de status wanneer u vooraf gecompileerde headers gebruikt. Deze macro is altijd gedefinieerd.

    In dit voorbeeld wordt gebruikgemaakt __COUNTER__ van het toewijzen van unieke id's aan drie verschillende objecten van hetzelfde type. De exampleClass constructor neemt een geheel getal als parameter. In main, de toepassing declareert drie objecten van het type exampleClass, met behulp van __COUNTER__ als de unieke id-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 Gedefinieerd als de letterlijke waarde voor gehele getallen 200406 wanneer deze is gecompileerd als C++ en een /clr compileroptie is ingesteld. Anders, niet gedefinieerd. Wanneer dit is gedefinieerd, __cplusplus_cli is dit van kracht in de gehele vertaaleenheid.

    // 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 Gedefinieerd als de letterlijke waarde voor geheel getal 201009 wanneer deze is gecompileerd als C++ en de /ZW compileroptie (Windows Runtime Compilation) is ingesteld. Anders, niet gedefinieerd.

  • _CPPRTTI Gedefinieerd als 1 als de /GR compileroptie (Enable Run-Time Type Information) is ingesteld. Anders, niet gedefinieerd.

  • _CPPUNWIND Gedefinieerd als 1 als een of meer van de /GX compileropties (Verwerking van uitzonderingen inschakelen), /clr (Common Language Runtime Compilation) of /EH (Exception Handling Model) zijn ingesteld. Anders, niet gedefinieerd.

  • _DEBUG Gedefinieerd als 1 wanneer de /LDdoptie , /MDdof /MTd compiler is ingesteld. Anders, niet gedefinieerd.

  • _DLL Gedefinieerd als 1 wanneer de /MD of /MDd -multithreaded DLL-compileroptie is ingesteld. Anders, niet gedefinieerd.

  • __FUNCDNAME__ Gedefinieerd als een letterlijke tekenreeks die de versierde naam van de omsluitfunctie bevat. De macro wordt alleen gedefinieerd binnen een functie. De __FUNCDNAME__ macro wordt niet uitgevouwen als u de /EP optie of /P compiler gebruikt.

    In dit voorbeeld worden de __FUNCDNAME__, __FUNCSIG__en __FUNCTION__ macro's gebruikt om functie-informatie weer te geven.

    // 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__ Gedefinieerd als een letterlijke tekenreeks die de handtekening van de omsluitfunctie bevat. De macro wordt alleen gedefinieerd binnen een functie. De __FUNCSIG__ macro wordt niet uitgevouwen als u de /EP optie of /P compiler gebruikt. Wanneer deze is gecompileerd voor een 64-bits doel, is __cdecl de aanroepconventie standaard. Zie de __FUNCDNAME__ macro voor een voorbeeld van gebruik.

  • __FUNCTION__ Gedefinieerd als een letterlijke tekenreeks die de ongedaan gemaakt naam van de omsluitfunctie bevat. De macro wordt alleen gedefinieerd binnen een functie. De __FUNCTION__ macro wordt niet uitgevouwen als u de /EP optie of /P compiler gebruikt. Zie de __FUNCDNAME__ macro voor een voorbeeld van gebruik.

  • _INTEGRAL_MAX_BITS Gedefinieerd als de letterlijke waarde voor geheel getal 64, de maximale grootte (in bits) voor een niet-ctor integraal type. Deze macro is altijd gedefinieerd.

    // integral_max_bits.cpp
    #include <stdio.h>
    int main() {
        printf("%d\n", _INTEGRAL_MAX_BITS);
    }
    
  • __INTELLISENSE__ Gedefinieerd als 1 tijdens een IntelliSense-compiler wordt doorgegeven in de Visual Studio IDE. Anders, niet gedefinieerd. U kunt deze macro gebruiken om code te bewaken die de IntelliSense-compiler niet begrijpt of om te schakelen tussen de build- en IntelliSense-compiler. Zie Tips voor probleemoplossing voor IntelliSense-traagheid voor meer informatie.

  • _ISO_VOLATILE Gedefinieerd als 1 als de /volatile:iso compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _KERNEL_MODE Gedefinieerd als 1 als de /kernel compileroptie (Binaire kernelmodus maken) is ingesteld. Anders, niet gedefinieerd.

  • _M_AMD64 Gedefinieerd als de letterlijke waarde 100 voor gehele getallen voor compilaties die gericht zijn op x64-processors of ARM64EC. Anders, niet gedefinieerd.

  • _M_ARM Gedefinieerd als de letterlijke waarde 7 voor gehele getallen voor compilaties die gericht zijn op ARM-processors. Niet gedefinieerd voor ARM64, ARM64EC en andere doelen.

  • _M_ARM_ARMV7VE Gedefinieerd als 1 wanneer de /arch:ARMv7VE compileroptie is ingesteld voor compilaties die gericht zijn op ARM-processors. Anders, niet gedefinieerd.

  • _M_ARM_FP Gedefinieerd als een letterlijke waarde voor geheel getal die aangeeft welke /arch compileroptie is ingesteld voor ARM-processordoelen. Anders, niet gedefinieerd.

    • Een waarde in het bereik 30-39 als er geen /arch ARM-optie is opgegeven, waarmee wordt aangegeven dat de standaardarchitectuur voor ARM is ingesteld (VFPv3).

    • Een waarde in het bereik van 40-49 als /arch:VFPv4 deze is ingesteld.

    • Zie (ARM) voor meer informatie/arch.

  • _M_ARM64 Gedefinieerd als 1 voor compilaties die gericht zijn op ARM64. Anders, niet gedefinieerd.

  • _M_ARM64EC Gedefinieerd als 1 voor compilaties die gericht zijn op ARM64EC. Anders, niet gedefinieerd.

  • _M_CEE Gedefinieerd als 001 als er /clr een compileroptie (Common Language Runtime Compilation) is ingesteld. Anders, niet gedefinieerd.

  • _M_CEE_PURE Afgeschaft vanaf Visual Studio 2015. Gedefinieerd als 001 als de /clr:pure compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _M_CEE_SAFE Afgeschaft vanaf Visual Studio 2015. Gedefinieerd als 001 als de /clr:safe compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _M_FP_CONTRACT Beschikbaar vanaf Visual Studio 2022. Gedefinieerd als 1 als de /fp:contract optie of /fp:fast compiler is ingesteld. Anders, niet gedefinieerd.

  • _M_FP_EXCEPT Gedefinieerd als 1 als de /fp:except optie of /fp:strict compiler is ingesteld. Anders, niet gedefinieerd.

  • _M_FP_FAST Gedefinieerd als 1 als de /fp:fast compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _M_FP_PRECISE Gedefinieerd als 1 als de /fp:precise compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _M_FP_STRICT Gedefinieerd als 1 als de /fp:strict compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _M_IX86 Gedefinieerd als de letterlijke waarde 600 voor gehele getallen voor compilaties die gericht zijn op x86-processors. Deze macro is niet gedefinieerd voor x64- of ARM-compilatiedoelen.

  • _M_IX86_FP Gedefinieerd als een letterlijke waarde voor een geheel getal dat de /arch compileroptie aangeeft die is ingesteld of de standaardwaarde. Deze macro wordt altijd gedefinieerd wanneer het compilatiedoel een x86-processor is. Anders, niet gedefinieerd. Wanneer deze is gedefinieerd, is de waarde:

    • 0 als de /arch:IA32 compileroptie is ingesteld.

    • 1 als de /arch:SSE compileroptie is ingesteld.

    • 2 als de /arch:SSE2optie , /arch:AVX, /arch:AVX2, /arch:AVX512, of /arch:AVX10.1/arch:AVX10.2 compiler is ingesteld. Deze waarde is de standaardwaarde als er /arch geen compileroptie is opgegeven. Wanneer /arch:AVX deze is opgegeven, wordt de macro __AVX__ ook gedefinieerd. Wanneer /arch:AVX2 is opgegeven, worden beide __AVX__ en __AVX2__ ook gedefinieerd. Wanneer /arch:AVX512 is opgegeven, __AVX__, , __AVX2____AVX512BW__, __AVX512CD__, , __AVX512DQ__en __AVX512F__worden __AVX512VL__ ook gedefinieerd. Wanneer /arch:AVX10.1 of /arch:AVX10.2 is opgegeven, __AVX__, , __AVX2__, __AVX512BW__, __AVX512CD__, , __AVX512DQ__en worden __AVX512F____AVX512VL____AVX10_VER__ ook gedefinieerd.

    • Zie (x86) voor meer informatie/arch.

  • _M_X64 Gedefinieerd als de letterlijke waarde 100 voor gehele getallen voor compilaties die gericht zijn op x64-processors of ARM64EC. Anders, niet gedefinieerd.

  • _MANAGED Gedefinieerd als 1 wanneer de /clr compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _MSC_BUILD Gedefinieerd als een letterlijk geheel getal dat het revisienummerelement van het versienummer van de compiler bevat. Het revisienummer is het laatste element van het versienummer met scheidingstekens tussen perioden. Als het versienummer van de Microsoft C/C++-compiler bijvoorbeeld 15.00.20706.01 is, is de _MSC_BUILD macro 1. Deze macro is altijd gedefinieerd.

  • _MSC_EXTENSIONS Gedefinieerd als 1 als de compileroptie on-by-default /Ze (Taalextensies inschakelen) is ingesteld. Anders, niet gedefinieerd.

  • _MSC_FULL_VER Gedefinieerd als een letterlijk geheel getal dat de belangrijkste, secundaire en buildnummerelementen van het versienummer van de compiler codeert. Het primaire getal is het eerste element van het door perioden gescheiden versienummer, het secundaire getal is het tweede element en het buildnummer is het derde element.

    Als de Microsoft C/C++-compilerversie bijvoorbeeld 19.39.33519 is, _MSC_FULL_VER is 193933519. Voer cl /? op de opdrachtregel in om het versienummer van de compiler weer te geven. Deze macro is altijd gedefinieerd. Zie voor meer informatie over compilerversiebeheer C++ compilerversies en met name Service-releases vanaf Visual Studio 2017 voor meer informatie over Visual Studio 2019 16.8, 16.9, 16.10 en 16.11, die ze apart moeten _MSC_FULL_VER vertellen.

  • _MSC_VER Gedefinieerd als een letterlijk geheel getal dat de belangrijkste en secundaire getalelementen van het versienummer van de compiler codeert. Het primaire getal is het eerste element van het door perioden gescheiden versienummer en het secundaire getal is het tweede element. Als het versienummer van de Microsoft C/C++-compiler bijvoorbeeld 17.00.51106.1 is, is de waarde _MSC_VER 1700. Voer cl /? op de opdrachtregel in om het versienummer van de compiler weer te geven. Deze macro is altijd gedefinieerd.

    Gebruik de >= operator om te testen op compilerreleases of updates in een bepaalde versie van Visual Studio of hoger. U kunt deze gebruiken in een voorwaardelijke richtlijn om te vergelijken met _MSC_VER die bekende versie. Als u verschillende wederzijds exclusieve versies hebt om te vergelijken, bestelt u de vergelijkingen in aflopende volgorde van het versienummer. Met deze code wordt bijvoorbeeld gecontroleerd op compilers die zijn uitgebracht in Visual Studio 2017 en hoger. Vervolgens wordt gecontroleerd op compilers die zijn uitgebracht in of na Visual Studio 2015. Vervolgens wordt gecontroleerd op alle compilers die zijn uitgebracht vóór Visual Studio 2015:

    #if _MSC_VER >= 1910
    // . . .
    #elif _MSC_VER >= 1900
    // . . .
    #else
    // . . .
    #endif
    

    Voor meer informatie over Visual Studio 2019 16.8 en 16.9 en 16.10 en 16.11, die dezelfde primaire en secundaire versies delen (en dus dezelfde waarde hebben), _MSC_VERraadpleegt u Service-releases vanaf Visual Studio 2017.

    Zie versiebeheer voor C++ voor meer informatie over de geschiedenis van compilerversies en compilerversies en de Visual Studio-versies waarmee ze overeenkomen. Visual C++ Compiler Version on the Microsoft C++ team blog.

  • _MSVC_LANG Gedefinieerd als een letterlijk geheel getal dat de C++-taalstandaard aangeeft waarop de compiler is gericht. Alleen code die is gecompileerd als C++ stelt deze in. De macro is standaard de letterlijke waarde 201402L van het gehele getal of wanneer de /std:c++14 compileroptie is opgegeven. De macro is ingesteld op 201703L als de /std:c++17 compileroptie is opgegeven. De macro is ingesteld op 202002L als de /std:c++20 compileroptie is opgegeven. Deze waarde wordt ingesteld op een hogere, niet-opgegeven waarde wanneer de /std:c++latest optie is opgegeven. Anders is de macro niet gedefinieerd. De _MSVC_LANG macro- en /std (taalstandaardversie opgeven) compileropties zijn beschikbaar vanaf Visual Studio 2015 Update 3.

  • __MSVC_RUNTIME_CHECKS Gedefinieerd als 1 wanneer een van de /RTC compileropties is ingesteld. Anders, niet gedefinieerd.

  • _MSVC_TRADITIONAL:

    • Beschikbaar vanaf Visual Studio 2017 versie 15.8: Gedefinieerd als 0 wanneer de compileroptie preprocessorcompilatiemodus /experimental:preprocessor is ingesteld. Standaard gedefinieerd als 1, of wanneer de /experimental:preprocessor- compileroptie is ingesteld, om aan te geven dat de traditionele preprocessor wordt gebruikt.
    • Beschikbaar vanaf Visual Studio 2019 versie 16.5: Gedefinieerd als 0 wanneer de preprocessorcompilatiemodusoptie /Zc:preprocessor is ingesteld. Gedefinieerd als 1, of wanneer de /Zc:preprocessor- compileroptie is ingesteld, om aan te geven dat de traditionele preprocessor in gebruik is (vervangt in wezen /Zc:preprocessor de afgeschafte /experimental:preprocessor).
    #if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
    // Logic using the traditional preprocessor
    #else
    // Logic using cross-platform compatible preprocessor
    #endif
    
  • _MTGedefinieerd als 1 wanneer /MD of /MDd (Multithreaded DLL)of/MT/MTd (Multithreaded) is opgegeven. Anders, niet gedefinieerd.

  • _NATIVE_WCHAR_T_DEFINED Gedefinieerd als 1 wanneer de /Zc:wchar_t compileroptie is ingesteld. Anders, niet gedefinieerd.

  • _OPENMP Gedefinieerd als letterlijk geheel getal 200203 als de /openmp compileroptie (OpenMP 2.0-ondersteuning inschakelen) is ingesteld. Deze waarde vertegenwoordigt de datum van de OpenMP-specificatie die door MSVC is geïmplementeerd. Anders, niet gedefinieerd.

    // _OPENMP_dir.cpp
    // compile with: /openmp
    #include <stdio.h>
    int main() {
        printf("%d\n", _OPENMP);
    }
    
  • _PREFAST_ Gedefinieerd als 1 wanneer de /analyze compileroptie is ingesteld. Anders, niet gedefinieerd.

  • __SANITIZE_ADDRESS__ Beschikbaar vanaf Visual Studio 2019 versie 16.9. Gedefinieerd als 1 wanneer de /fsanitize=address compileroptie is ingesteld. Anders, niet gedefinieerd.

  • __TIMESTAMP__ Gedefinieerd als een letterlijke tekenreeks die de datum en tijd bevat van de laatste wijziging van het huidige bronbestand, in het verkorte, constante lengteformulier dat wordt geretourneerd door de functie CRT asctime , bijvoorbeeld Fri 19 Aug 13:32:58 2016. Deze macro is altijd gedefinieerd.

  • _VC_NODEFAULTLIB Gedefinieerd als 1 wanneer de /Zl compileroptie (Standaardbibliotheeknaam weglaten) is ingesteld. Anders, niet gedefinieerd.

  • _WCHAR_T_DEFINED Gedefinieerd als 1 wanneer de standaard-compileroptie /Zc:wchar_t is ingesteld. De _WCHAR_T_DEFINED macro is gedefinieerd, maar heeft geen waarde als de /Zc:wchar_t- compileroptie is ingesteld en wchar_t is gedefinieerd in een systeemkopbestand dat is opgenomen in uw project. Anders, niet gedefinieerd.

  • _WIN32 Gedefinieerd als 1 wanneer het compilatiedoel 32-bits ARM, 64-bits ARM, x86, x64 of ARM64EC is. Anders, niet gedefinieerd.

  • _WIN64 Gedefinieerd als 1 wanneer het compilatiedoel 64-bits ARM, x64 of ARM64EC is. Anders, niet gedefinieerd.

  • _WINRT_DLL Gedefinieerd als 1 wanneer deze is gecompileerd als C++ en zowel /ZW (Windows Runtime-compilatie) als /LD compileropties /LDd zijn ingesteld. Anders, niet gedefinieerd.

Er zijn geen preprocessormacro's die de versie van de ATL- of MFC-bibliotheek identificeren vooraf gedefinieerd door de compiler. AtL- en MFC-bibliotheekkoppen definiëren deze versiemacro's intern. Ze zijn niet gedefinieerd in preprocessor-instructies die zijn gemaakt voordat de vereiste header wordt opgenomen.

  • _ATL_VER Gedefinieerd als <atldef.h> een letterlijk geheel getal dat het ATL-versienummer codeert.

  • _MFC_VER Gedefinieerd als <afxver_.h> een letterlijk geheel getal dat het MFC-versienummer codeert.

Zie ook

Macro's (C/C++)
Preprocessoroperators
Preprocessorrichtlijnen