Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 vanchar.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.
__cplusplusGedefinieerd 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#lineinstructie. 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/Zacompileroptie 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/stdC11- 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/stdC11- 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/stdC11- 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/stdC11- of C17-opties is opgegeven.__STDC_VERSION__Gedefinieerd als gecompileerd als C en een van de/stdC11- of C17-opties is opgegeven. Het breidt uit naar201112Lvoor/std:c11, en201710Lvoor/std:c17.__STDCPP_DEFAULT_NEW_ALIGNMENT__Wanneer/std:c17of later is opgegeven, wordt deze macro uitgebreid naar eensize_tletterlijke waarde die de waarde heeft van de uitlijning die wordt gegarandeerd door een aanroep naar uitlijnings-niet.operator newGrotere uitlijningen worden doorgegeven aan een uitlijningsbewuste overbelasting, zoalsoperator 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_ARCHGedefinieerd 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_ARCHis 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:ATOMcompileroptie 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.2compiler 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.2compiler 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.2compiler 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.2compiler 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.2compiler 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.2compiler 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.1optie of/arch:AVX10.2compiler is ingesteld en het compilerdoel x86 of x64 is. Anders, niet gedefinieerd._CHAR_UNSIGNEDGedefinieerd als 1 als het standaardtypecharniet is ondertekend. Deze waarde wordt gedefinieerd wanneer de/Jcompileroptie (Standaard tekentype is niet-ondertekend) is ingesteld. Anders, niet gedefinieerd.__CLR_VERGedefinieerd 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 vormMmmbbbbb, waarbijMde primaire versie van de runtime is,mmde secundaire versie van de runtime is enbbbbbhet buildnummer.__CLR_VERis gedefinieerd als de/clrcompileroptie is ingesteld. Anders, niet gedefinieerd.// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); }_CONTROL_FLOW_GUARDGedefinieerd als 1 wanneer de/guard:cfcompileroptie (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. DeexampleClassconstructor neemt een geheel getal als parameter. Inmain, de toepassing declareert drie objecten van het typeexampleClass, 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_cliGedefinieerd als de letterlijke waarde voor gehele getallen 200406 wanneer deze is gecompileerd als C++ en een/clrcompileroptie is ingesteld. Anders, niet gedefinieerd. Wanneer dit is gedefinieerd,__cplusplus_cliis 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_winrtGedefinieerd als de letterlijke waarde voor geheel getal 201009 wanneer deze is gecompileerd als C++ en de/ZWcompileroptie (Windows Runtime Compilation) is ingesteld. Anders, niet gedefinieerd._CPPRTTIGedefinieerd als 1 als de/GRcompileroptie (Enable Run-Time Type Information) is ingesteld. Anders, niet gedefinieerd._CPPUNWINDGedefinieerd als 1 als een of meer van de/GXcompileropties (Verwerking van uitzonderingen inschakelen),/clr(Common Language Runtime Compilation) of/EH(Exception Handling Model) zijn ingesteld. Anders, niet gedefinieerd._DEBUGGedefinieerd als 1 wanneer de/LDdoptie ,/MDdof/MTdcompiler is ingesteld. Anders, niet gedefinieerd._DLLGedefinieerd als 1 wanneer de/MDof/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/EPoptie of/Pcompiler 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/EPoptie of/Pcompiler gebruikt. Wanneer deze is gecompileerd voor een 64-bits doel, is__cdeclde 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/EPoptie of/Pcompiler gebruikt. Zie de__FUNCDNAME__macro voor een voorbeeld van gebruik._INTEGRAL_MAX_BITSGedefinieerd 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_VOLATILEGedefinieerd als 1 als de/volatile:isocompileroptie is ingesteld. Anders, niet gedefinieerd._KERNEL_MODEGedefinieerd als 1 als de/kernelcompileroptie (Binaire kernelmodus maken) is ingesteld. Anders, niet gedefinieerd._M_AMD64Gedefinieerd als de letterlijke waarde 100 voor gehele getallen voor compilaties die gericht zijn op x64-processors of ARM64EC. Anders, niet gedefinieerd._M_ARMGedefinieerd 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_ARMV7VEGedefinieerd als 1 wanneer de/arch:ARMv7VEcompileroptie is ingesteld voor compilaties die gericht zijn op ARM-processors. Anders, niet gedefinieerd._M_ARM_FPGedefinieerd als een letterlijke waarde voor geheel getal die aangeeft welke/archcompileroptie is ingesteld voor ARM-processordoelen. Anders, niet gedefinieerd.Een waarde in het bereik 30-39 als er geen
/archARM-optie is opgegeven, waarmee wordt aangegeven dat de standaardarchitectuur voor ARM is ingesteld (VFPv3).Een waarde in het bereik van 40-49 als
/arch:VFPv4deze is ingesteld.Zie (ARM) voor meer informatie
/arch.
_M_ARM64Gedefinieerd als 1 voor compilaties die gericht zijn op ARM64. Anders, niet gedefinieerd._M_ARM64ECGedefinieerd als 1 voor compilaties die gericht zijn op ARM64EC. Anders, niet gedefinieerd._M_CEEGedefinieerd als 001 als er/clreen compileroptie (Common Language Runtime Compilation) is ingesteld. Anders, niet gedefinieerd._M_CEE_PUREAfgeschaft vanaf Visual Studio 2015. Gedefinieerd als 001 als de/clr:purecompileroptie is ingesteld. Anders, niet gedefinieerd._M_CEE_SAFEAfgeschaft vanaf Visual Studio 2015. Gedefinieerd als 001 als de/clr:safecompileroptie is ingesteld. Anders, niet gedefinieerd._M_FP_CONTRACTBeschikbaar vanaf Visual Studio 2022. Gedefinieerd als 1 als de/fp:contractoptie of/fp:fastcompiler is ingesteld. Anders, niet gedefinieerd._M_FP_EXCEPTGedefinieerd als 1 als de/fp:exceptoptie of/fp:strictcompiler is ingesteld. Anders, niet gedefinieerd._M_FP_FASTGedefinieerd als 1 als de/fp:fastcompileroptie is ingesteld. Anders, niet gedefinieerd._M_FP_PRECISEGedefinieerd als 1 als de/fp:precisecompileroptie is ingesteld. Anders, niet gedefinieerd._M_FP_STRICTGedefinieerd als 1 als de/fp:strictcompileroptie is ingesteld. Anders, niet gedefinieerd._M_IX86Gedefinieerd 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_FPGedefinieerd als een letterlijke waarde voor een geheel getal dat de/archcompileroptie 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:IA32compileroptie is ingesteld.1 als de
/arch:SSEcompileroptie is ingesteld.2 als de
/arch:SSE2optie ,/arch:AVX,/arch:AVX2,/arch:AVX512, of/arch:AVX10.1/arch:AVX10.2compiler is ingesteld. Deze waarde is de standaardwaarde als er/archgeen compileroptie is opgegeven. Wanneer/arch:AVXdeze is opgegeven, wordt de macro__AVX__ook gedefinieerd. Wanneer/arch:AVX2is opgegeven, worden beide__AVX__en__AVX2__ook gedefinieerd. Wanneer/arch:AVX512is opgegeven,__AVX__, ,__AVX2____AVX512BW__,__AVX512CD__, ,__AVX512DQ__en__AVX512F__worden__AVX512VL__ook gedefinieerd. Wanneer/arch:AVX10.1of/arch:AVX10.2is opgegeven,__AVX__, ,__AVX2__,__AVX512BW__,__AVX512CD__, ,__AVX512DQ__en worden__AVX512F____AVX512VL____AVX10_VER__ook gedefinieerd.
_M_X64Gedefinieerd als de letterlijke waarde 100 voor gehele getallen voor compilaties die gericht zijn op x64-processors of ARM64EC. Anders, niet gedefinieerd._MANAGEDGedefinieerd als 1 wanneer de/clrcompileroptie is ingesteld. Anders, niet gedefinieerd._MSC_BUILDGedefinieerd 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_BUILDmacro 1. Deze macro is altijd gedefinieerd._MSC_EXTENSIONSGedefinieerd als 1 als de compileroptie on-by-default/Ze(Taalextensies inschakelen) is ingesteld. Anders, niet gedefinieerd._MSC_FULL_VERGedefinieerd 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_VERis 193933519. Voercl /?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_VERvertellen._MSC_VERGedefinieerd 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_VER1700. Voercl /?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_VERdie 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 // . . . #endifVoor 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_LANGGedefinieerd 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 waarde201402Lvan het gehele getal of wanneer de/std:c++14compileroptie is opgegeven. De macro is ingesteld op201703Lals de/std:c++17compileroptie is opgegeven. De macro is ingesteld op202002Lals de/std:c++20compileroptie is opgegeven. Deze waarde wordt ingesteld op een hogere, niet-opgegeven waarde wanneer de/std:c++latestoptie is opgegeven. Anders is de macro niet gedefinieerd. De_MSVC_LANGmacro- en/std(taalstandaardversie opgeven) compileropties zijn beschikbaar vanaf Visual Studio 2015 Update 3.__MSVC_RUNTIME_CHECKSGedefinieerd als 1 wanneer een van de/RTCcompileropties is ingesteld. Anders, niet gedefinieerd._MSVC_TRADITIONAL:- Beschikbaar vanaf Visual Studio 2017 versie 15.8: Gedefinieerd als 0 wanneer de compileroptie preprocessorcompilatiemodus 
/experimental:preprocessoris 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:preprocessoris 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:preprocessorde afgeschafte/experimental:preprocessor). 
#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL // Logic using the traditional preprocessor #else // Logic using cross-platform compatible preprocessor #endif- Beschikbaar vanaf Visual Studio 2017 versie 15.8: Gedefinieerd als 0 wanneer de compileroptie preprocessorcompilatiemodus 
 _MTGedefinieerd als 1 wanneer/MDof/MDd(Multithreaded DLL)of/MT/MTd(Multithreaded) is opgegeven. Anders, niet gedefinieerd._NATIVE_WCHAR_T_DEFINEDGedefinieerd als 1 wanneer de/Zc:wchar_tcompileroptie is ingesteld. Anders, niet gedefinieerd._OPENMPGedefinieerd als letterlijk geheel getal 200203 als de/openmpcompileroptie (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/analyzecompileroptie is ingesteld. Anders, niet gedefinieerd.__SANITIZE_ADDRESS__Beschikbaar vanaf Visual Studio 2019 versie 16.9. Gedefinieerd als 1 wanneer de/fsanitize=addresscompileroptie 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 CRTasctime, bijvoorbeeldFri 19 Aug 13:32:58 2016. Deze macro is altijd gedefinieerd._VC_NODEFAULTLIBGedefinieerd als 1 wanneer de/Zlcompileroptie (Standaardbibliotheeknaam weglaten) is ingesteld. Anders, niet gedefinieerd._WCHAR_T_DEFINEDGedefinieerd als 1 wanneer de standaard-compileroptie/Zc:wchar_tis ingesteld. De_WCHAR_T_DEFINEDmacro is gedefinieerd, maar heeft geen waarde als de/Zc:wchar_t-compileroptie is ingesteld enwchar_tis gedefinieerd in een systeemkopbestand dat is opgenomen in uw project. Anders, niet gedefinieerd._WIN32Gedefinieerd als 1 wanneer het compilatiedoel 32-bits ARM, 64-bits ARM, x86, x64 of ARM64EC is. Anders, niet gedefinieerd._WIN64Gedefinieerd als 1 wanneer het compilatiedoel 64-bits ARM, x64 of ARM64EC is. Anders, niet gedefinieerd._WINRT_DLLGedefinieerd als 1 wanneer deze is gecompileerd als C++ en zowel/ZW(Windows Runtime-compilatie) als/LDcompileropties/LDdzijn 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_VERGedefinieerd als<atldef.h>een letterlijk geheel getal dat het ATL-versienummer codeert._MFC_VERGedefinieerd als<afxver_.h>een letterlijk geheel getal dat het MFC-versienummer codeert.
Zie ook
              Macro's (C/C++)
              Preprocessoroperators
              Preprocessorrichtlijnen