Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft C/C++-kompilatorn (MSVC) fördefinierade vissa förprocessormakron beroende på språket (C eller C++), kompileringsmålet och de valda kompilatoralternativen.
MSVC stöder de fördefinierade förprocessormakron som krävs enligt standarderna ANSI/ISO C99, C11 och C17 samt ISO C++14, C++17 och C++20. Implementeringen stöder också flera fler Microsoft-specifika makron för förprocessorer.
Vissa makron definieras endast för specifika byggmiljöer eller kompilatoralternativ. Förutom där det anges definieras makrona i en översättningsenhet som om de angavs som /D alternativargument för kompilatorn. När den definieras expanderar förprocessorn makron sina angivna värden före kompilering. De fördefinierade makrona tar inga argument och kan inte omdefinieras.
Fördefinierad standardidentifierare
Kompilatorn stöder den fördefinierade identifieraren som anges av ISO C99 och ISO C++11.
__func__Det okvalificerade och odekorerade namnet på den omslutande funktionen som en funktionslokal statisk const-matris medchar.void example() { printf("%s\n", __func__); } // prints "example"
Standardpredefinierade makron
Kompilatorn stöder dessa fördefinierade makron som anges av iso C99-, C11-, C17- och ISO C++17-standarder.
__cplusplusDefinieras som ett heltalsliteralt värde när översättningsenheten kompileras som C++. Annars är det odefinierat.__DATE__Kompileringsdatumet för den aktuella källfilen. Datumet är en strängliteral med konstant längd i formuläret Mmm dd yyyyy. Månadsnamnet Mmm är samma som det förkortade månadsnamnet som genereras av asctime-funktionen C Runtime Library (CRT). Det första tecknet för datum-DD är ett blanksteg om värdet är mindre än 10. Det här makrot är alltid definierat.__FILE__Namnet på den aktuella källfilen.__FILE__expanderas till en teckensträngliteral. För att säkerställa att den fullständiga sökvägen till filen visas använder du/FC(fullständig sökväg till källkodsfilen i diagnostik). Det här makrot är alltid definierat.__LINE__Definieras som heltalsradsnumret i den aktuella källfilen. Värdet för det här makrot kan ändras med hjälp av ett#linedirektiv. Den integrerade typen av värdet__LINE__för kan variera beroende på kontext. Det här makrot är alltid definierat.__STDC__Definieras som 1 när det kompileras som C och om kompilatoralternativet/Zaanges. Från och med Visual Studio 2022 version 17.2 definieras den som 1 när den kompileras som C och om kompilatoralternativet/Zc:__STDC__anges. Annars är det odefinierat.__STDC_HOSTED__Definieras som 1 om implementeringen är en värdbaserad implementering, en implementering som stöder hela det nödvändiga standardbiblioteket. Annars definieras som 0.__STDC_NO_ATOMICS__Definieras som 1 om implementeringen inte stöder valfria atomiska standardfunktioner. MSVC-implementeringen definierar den som 1 när den/stdkompileras som C och något av C11- eller C17-alternativen anges.__STDC_NO_COMPLEX__Definieras som 1 om implementeringen inte stöder valfria komplexa standardnummer. MSVC-implementeringen definierar den som 1 när den/stdkompileras som C och något av C11- eller C17-alternativen anges.__STDC_NO_THREADS__Definieras som 1 om implementeringen inte stöder valfria standardtrådar. MSVC-implementeringen definierar den som 1 när den/stdkompileras som C och något av C11- eller C17-alternativen anges.__STDC_NO_VLA__Definieras som 1 om implementeringen inte stöder standardmatriser med variabellängd. MSVC-implementeringen definierar den som 1 när den/stdkompileras som C och något av C11- eller C17-alternativen anges.__STDC_VERSION__Definieras när det kompileras som C och något av/stdalternativen C11 eller C17 anges. Den expanderar till201112Lför/std:c11, och201710Lför/std:c17.__STDCPP_DEFAULT_NEW_ALIGNMENT__När/std:c17eller senare anges expanderas makrot till ensize_tliteral som har värdet för justeringen som garanteras av ett anrop till alignment-unawareoperator new. Större justering skickas till en justeringsmedveten överlagring, till exempeloperator new(std::size_t, std::align_val_t). Mer information finns i/Zc:alignedNew(C++17 överjusterad allokering).__STDCPP_THREADS__Definieras som 1 om och endast om ett program kan ha mer än en körningstråd och kompileras som C++. Annars är det odefinierat.__TIME__Tiden för översättning av den förbearbetade översättningsenheten. Tiden är en teckensträngliteral i formuläret hh:mm:ss, samma som tiden som returnerades av funktionen CRT asctime . Det här makrot är alltid definierat.
Microsoft-specifika fördefinierade makron
MSVC stöder andra fördefinierade makron:
__ARM_ARCHDefinieras som en heltalsliteral som representerar ARM-arkitekturversionen. Värdet definieras som 8 för Armv8-A arkitekturen. För 8.1 och senare skalas värdet för mindre versioner, till exempel X.Y, med hjälp av formeln X * 100 + Y enligt definitionen i ARM C-språktillägget. För Armv8.1__ARM_ARCHär till exempel 8 * 100 + 1 eller 801. Information om hur du anger ARM-arkitekturversionen finns i/arch (ARM64). Det här makrot introducerades i Visual Studio 2022 version 17.10.__ATOM__Definieras som 1 när kompilatoralternativet/favor:ATOManges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX__Definieras som 1 när/arch:AVXalternativen ,/arch:AVX2,/arch:AVX512,/arch:AVX10.1, eller/arch:AVX10.2kompilatorn anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX2__Definieras som 1 när/arch:AVX2alternativet ,/arch:AVX512,/arch:AVX10.1, eller/arch:AVX10.2kompilator anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX512BW__Definieras som 1 när/arch:AVX512alternativet ,/arch:AVX10.1, eller/arch:AVX10.2kompilator anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX512CD__Definieras som 1 när/arch:AVX512alternativet ,/arch:AVX10.1, eller/arch:AVX10.2kompilator anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX512DQ__Definieras som 1 när/arch:AVX512alternativet ,/arch:AVX10.1, eller/arch:AVX10.2kompilator anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX512F__Definieras som 1 när/arch:AVX512alternativet ,/arch:AVX10.1, eller/arch:AVX10.2kompilator anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX512VL__Definieras som 1 när/arch:AVX512alternativet ,/arch:AVX10.1, eller/arch:AVX10.2kompilator anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.__AVX10_VER__Definieras som ett heltal som representerar versionen av AVX10 när eller kompilatoralternativet/arch:AVX10.1/arch:AVX10.2anges och kompilatormålet är x86 eller x64. Annars är det odefinierat._CHAR_UNSIGNEDDefinieras som 1 om standardtypencharär osignerad. Det här värdet definieras när kompilatoralternativet/J(Standardteckentyp är osignerad) anges. Annars är det odefinierat.__CLR_VERDefinieras som en heltalsliteral som representerar versionen av Common Language Runtime (CLR) som används för att kompilera appen. Värdet kodas i formuläretMmmbbbbb, därMär huvudversionen av körningen,mmär delversionen av körningen ochbbbbbär versionsnumret.__CLR_VERdefinieras om kompilatoralternativet/clrhar angetts. Annars är det odefinierat.// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); }_CONTROL_FLOW_GUARDDefinieras som 1 när kompileringsalternativet/guard:cf(Aktivera Kontrollflödesskydd) har angetts. Annars är det odefinierat.__COUNTER__Expanderar till en heltalsliteral som börjar vid 0. Värdet ökar med 1 varje gång det används i en källfil eller i inkluderade rubriker i källfilen.__COUNTER__kommer ihåg dess tillstånd när du använder förkompilerade rubriker. Det här makrot är alltid definierat.Det här exemplet används
__COUNTER__för att tilldela unika identifierare till tre olika objekt av samma typ. KonstruktornexampleClasstar ett heltal som en parameter. Imaindeklarerar programmet tre objekt av typenexampleClass, med som__COUNTER__den unika identifierarparametern:// 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_cliDefinieras som heltalsliteralt värde 200406 när det kompileras som C++ och ett/clrkompilatoralternativ anges. Annars är det odefinierat. När det definieras__cplusplus_cligäller det i hela översättningsenheten.// 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_winrtDefinieras som heltalsliteralt värde 201009 när det kompileras som C++ och kompileringsalternativet/ZW(Windows Runtime-kompilering) anges. Annars är det odefinierat._CPPRTTIDefinieras som 1 om kompilatoralternativet/GR(Aktivera Run-Time typinformation) har angetts. Annars är det odefinierat._CPPUNWINDDefinieras som 1 om ett eller flera av kompileringsalternativen/GX(Aktivera undantagshantering),/clr(Common Language Runtime-kompilering) eller/EH(undantagshanteringsmodell) har angetts. Annars är det odefinierat._DEBUGDefinieras som 1 när/LDdalternativet ,/MDd, eller/MTdkompilator anges. Annars är det odefinierat._DLLDefinieras som 1 när kompilatoralternativet/MDeller/MDd(flertrådad DLL) har angetts. Annars är det odefinierat.__FUNCDNAME__Definieras som en strängliteral som innehåller det dekorerade namnet på den omslutande funktionen. Makrot definieras endast i en funktion. Makrot__FUNCDNAME__expanderas inte om du använder/EPalternativet eller/Pkompilatorn.I det här exemplet används makrona
__FUNCDNAME__,__FUNCSIG__och__FUNCTION__för att visa funktionsinformation.// 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__Definieras som en strängliteral som innehåller signaturen för den omslutande funktionen. Makrot definieras endast i en funktion. Makrot__FUNCSIG__expanderas inte om du använder/EPalternativet eller/Pkompilatorn. När den kompileras för ett 64-bitarsmål är__cdeclanropskonventionen som standard. Ett exempel på användning finns i makrot__FUNCDNAME__.__FUNCTION__Definieras som en strängliteral som innehåller det odekorerade namnet på den omslutande funktionen. Makrot definieras endast i en funktion. Makrot__FUNCTION__expanderas inte om du använder/EPalternativet eller/Pkompilatorn. Ett exempel på användning finns i makrot__FUNCDNAME__._INTEGRAL_MAX_BITSDefinierat som heltalsliteralt värde 64, den maximala storleken (i bitar) för en icke-bevektorintegreringstyp. Det här makrot är alltid definierat.// integral_max_bits.cpp #include <stdio.h> int main() { printf("%d\n", _INTEGRAL_MAX_BITS); }__INTELLISENSE__Definieras som 1 under ett IntelliSense-kompilatorpass i Visual Studio IDE. Annars är det odefinierat. Du kan använda det här makrot för att skydda kod som IntelliSense-kompilatorn inte förstår eller använda det för att växla mellan kompilatorn build och IntelliSense. Mer information finns i Felsökningstips för IntelliSense-långsamhet._ISO_VOLATILEDefinieras som 1 om kompilatoralternativet/volatile:isohar angetts. Annars är det odefinierat._KERNEL_MODEDefinieras som 1 om kompilatoralternativet/kernel(Skapa binärt kernelläge) har angetts. Annars är det odefinierat._M_AMD64Definieras som heltalsliteralvärdet 100 för kompileringar som riktar sig till x64-processorer eller ARM64EC. Annars är det odefinierat._M_ARMDefinieras som heltalsliteralt värde 7 för kompileringar som riktar in sig på ARM-processorer. Odefinierat för ARM64, ARM64EC och andra mål._M_ARM_ARMV7VEDefinieras som 1 när kompileringsalternativet/arch:ARMv7VEanges för kompileringar som riktar sig till ARM-processorer. Annars är det odefinierat._M_ARM_FPDefinierat som ett heltalsliteralt värde som anger vilket kompilatoralternativ som/archangavs för ARM-processormål. Annars är det odefinierat.Ett värde i intervallet 30–39 om inget ARM-alternativ
/archangavs, vilket anger att standardarkitekturen för ARM har angetts (VFPv3).Ett värde i intervallet 40–49 om
/arch:VFPv4har angetts.Mer information finns i
/arch(ARM).
_M_ARM64Definieras som 1 för kompileringar som är avsedda för ARM64. Annars är det odefinierat._M_ARM64ECDefinieras som 1 för kompileringar som mål ARM64EC. Annars är det odefinierat._M_CEEDefinieras som 001 om något/clrkompilatoralternativ (Common Language Runtime Compil) har angetts. Annars är det odefinierat._M_CEE_PUREInaktuell från och med Visual Studio 2015. Definieras som 001 om kompilatoralternativet/clr:purehar angetts. Annars är det odefinierat._M_CEE_SAFEInaktuell från och med Visual Studio 2015. Definieras som 001 om kompilatoralternativet/clr:safehar angetts. Annars är det odefinierat._M_FP_CONTRACTTillgänglig från och med Visual Studio 2022. Definieras som 1 om kompilatoralternativet/fp:contracteller/fp:fastär inställt. Annars är det odefinierat._M_FP_EXCEPTDefinieras som 1 om kompilatoralternativet/fp:excepteller/fp:strictär inställt. Annars är det odefinierat._M_FP_FASTDefinieras som 1 om kompilatoralternativet/fp:fasthar angetts. Annars är det odefinierat._M_FP_PRECISEDefinieras som 1 om kompilatoralternativet/fp:precisehar angetts. Annars är det odefinierat._M_FP_STRICTDefinieras som 1 om kompilatoralternativet/fp:stricthar angetts. Annars är det odefinierat._M_IX86Definieras som heltalsliteralvärdet 600 för kompileringar som riktar sig till x86-processorer. Det här makrot har inte definierats för x64- eller ARM-kompileringsmål._M_IX86_FPDefinierat som ett heltalsliteralt värde som anger/archdet kompilatoralternativ som har angetts eller standardvärdet. Det här makrot definieras alltid när kompileringsmålet är en x86-processor. Annars är det odefinierat. När det definieras är värdet:0 om kompilatoralternativet
/arch:IA32har angetts.1 om kompilatoralternativet
/arch:SSEhar angetts.2 om
/arch:SSE2alternativet ,/arch:AVX,/arch:AVX2,/arch:AVX512,/arch:AVX10.1eller/arch:AVX10.2kompilator angavs. Det här värdet är standardvärdet om ett/archkompilatoralternativ inte har angetts. När/arch:AVXhar angetts definieras även makrot__AVX__. När/arch:AVX2anges definieras båda__AVX__och__AVX2__även. När/arch:AVX512anges definieras även ,__AVX____AVX2__,__AVX512BW__,__AVX512CD__,__AVX512DQ__,__AVX512F__och__AVX512VL__. När/arch:AVX10.1eller/arch:AVX10.2har angetts definieras även ,__AVX2____AVX__,__AVX512BW__,__AVX512CD__,__AVX512DQ____AVX512F__och__AVX512VL____AVX10_VER__.Mer information finns i
/arch(x86).
_M_X64Definieras som heltalsliteralvärdet 100 för kompileringar som riktar sig till x64-processorer eller ARM64EC. Annars är det odefinierat._MANAGEDDefinieras som 1 när kompilatoralternativet/clranges. Annars är det odefinierat._MSC_BUILDDefinieras som en heltalsliteral som innehåller revisionsnummerelementet i kompilatorns versionsnummer. Revisionsnumret är det sista elementet i det periodavgränsade versionsnumret. Om versionsnumret för Microsoft C/C++-kompilatorn till exempel är 15.00.20706.01 är makrot_MSC_BUILD1. Det här makrot är alltid definierat._MSC_EXTENSIONSDefinieras som 1 om kompileringsalternativet on-by-default/Ze(Aktivera språktillägg) har angetts . Annars är det odefinierat._MSC_FULL_VERDefinieras som en heltalsliteral som kodar huvud-, del- och versionsnummerelementen i kompilatorns versionsnummer. Huvudnumret är det första elementet i det periodavgränsade versionsnumret, delnumret är det andra elementet och versionsnumret är det tredje elementet.Om kompilatorversionen för Microsoft C/C++ till exempel är 19.39.33519 193933519
_MSC_FULL_VER. Angecl /?på kommandoraden för att visa kompilatorns versionsnummer. Det här makrot är alltid definierat. Mer information om versionshantering av kompilatorer finns i Version av C++-kompilatorn och specifikt Service-versioner som börjar med Visual Studio 2017 för mer information om Visual Studio 2019 16.8, 16.9, 16.10 och 16.11, som kräver_MSC_FULL_VERatt de skiljs åt._MSC_VERDefinieras som en heltalsliteral som kodar huvud- och delnummerelementen i kompilatorns versionsnummer. Huvudnumret är det första elementet i det periodavgränsade versionsnumret och delnumret är det andra elementet. Om versionsnumret för Microsoft C/C++-kompilatorn till exempel är 17.00.51106.1 är värdet_MSC_VER1700. Angecl /?på kommandoraden för att visa kompilatorns versionsnummer. Det här makrot är alltid definierat.Om du vill testa för kompilatorversioner eller uppdateringar i en viss version av Visual Studio eller senare använder du operatorn
>=. Du kan använda det i ett villkorligt direktiv för att jämföra_MSC_VERmed den kända versionen. Om du har flera ömsesidigt uteslutande versioner att jämföra beställer du dina jämförelser i fallande ordning efter versionsnummer. Den här koden söker till exempel efter kompilatorer som släpptes i Visual Studio 2017 och senare. Därefter söker den efter kompilatorer som släppts i eller efter Visual Studio 2015. Sedan söker den efter alla kompilatorer som släpptes före Visual Studio 2015:#if _MSC_VER >= 1910 // . . . #elif _MSC_VER >= 1900 // . . . #else // . . . #endifMer information om Visual Studio 2019 16.8 och 16.9 och 16.10 och 16.11, som delar samma större och mindre versioner (och så har samma värde för
_MSC_VER), finns i Tjänstversioner som börjar med Visual Studio 2017.Mer information om historiken för versionshantering av kompilatorer och versionsnummer för kompilatorn och de Visual Studio-versioner som de motsvarar finns i versionerna av C++-kompilatorn. Visual C++-kompilatorversion på Microsoft C++-teamets blogg.
_MSVC_LANGDefinieras som en heltalsliteral som anger C++-språkstandarden som mål för kompilatorn. Endast kod som kompileras som C++ anger den. Makrot är heltalsliteralt värde201402Lsom standard, eller när kompilatoralternativet/std:c++14har angetts. Makrot är inställt på201703Lom kompilatoralternativet/std:c++17har angetts. Makrot är inställt på202002Lom kompilatoralternativet/std:c++20har angetts. Det är inställt på ett högre, ospecificerat värde när/std:c++latestalternativet anges. Annars är makrot odefinierat. Kompilatoralternativen_MSVC_LANGmakro och/std(Ange språkstandardversion) är tillgängliga från och med Visual Studio 2015 Update 3.__MSVC_RUNTIME_CHECKSDefinieras som 1 när ett av kompilatoralternativen/RTCanges. Annars är det odefinierat._MSVC_TRADITIONAL:- Tillgänglig från och med Visual Studio 2017 version 15.8: Definieras som 0 när kompilatoralternativet för förprocessorns efterlevnadsläge
/experimental:preprocessorhar angetts. Definieras som 1 som standard, eller när kompileringsalternativet/experimental:preprocessor-har angetts, för att indikera att den traditionella förprocessorn används. - Tillgänglig från och med Visual Studio 2019 version 16.5: Definieras som 0 när kompilatoralternativet för förprocessorns efterlevnadsläge
/Zc:preprocessorhar angetts. Definieras som 1 som standard, eller när kompileringsalternativet/Zc:preprocessor-har angetts, för att indikera att den traditionella förprocessorn används (i huvudsak/Zc:preprocessorersätter den inaktuella/experimental:preprocessor).
#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL // Logic using the traditional preprocessor #else // Logic using cross-platform compatible preprocessor #endif- Tillgänglig från och med Visual Studio 2017 version 15.8: Definieras som 0 när kompilatoralternativet för förprocessorns efterlevnadsläge
_MTDefinieras som 1 när/MDeller/MDd(Multithreaded DLL)eller/MT/MTd(Multithreaded) anges. Annars är det odefinierat._NATIVE_WCHAR_T_DEFINEDDefinieras som 1 när kompilatoralternativet/Zc:wchar_tanges. Annars är det odefinierat._OPENMPDefinieras som heltalsliteral 200203 om kompileringsalternativet/openmp(Aktivera OpenMP 2.0 Support) har angetts. Det här värdet representerar datumet för OpenMP-specifikationen som implementerats av MSVC. Annars är det odefinierat.// _OPENMP_dir.cpp // compile with: /openmp #include <stdio.h> int main() { printf("%d\n", _OPENMP); }_PREFAST_Definieras som 1 när kompilatoralternativet/analyzeanges. Annars är det odefinierat.__SANITIZE_ADDRESS__Tillgänglig från och med Visual Studio 2019 version 16.9. Definieras som 1 när kompilatoralternativet/fsanitize=addressanges. Annars är det odefinierat.__TIMESTAMP__Definieras som en strängliteral som innehåller datum och tid för den senaste ändringen av den aktuella källfilen, i det förkortade, konstanta längdformuläret som returneras av CRT-funktionenasctime, till exempelFri 19 Aug 13:32:58 2016. Det här makrot är alltid definierat._VC_NODEFAULTLIBDefinieras som 1 när kompilatoralternativet/Zl(Utelämna standardbiblioteksnamn) anges. Annars är det odefinierat._WCHAR_T_DEFINEDDefinieras som 1 när standardkompilatoralternativet/Zc:wchar_tanges. Makrot_WCHAR_T_DEFINEDdefinieras men har inget värde om kompilatoralternativet/Zc:wchar_t-har angetts ochwchar_tdefinieras i en systemhuvudfil som ingår i projektet. Annars är det odefinierat._WIN32Definieras som 1 när kompileringsmålet är 32-bitars ARM, 64-bitars ARM, x86, x64 eller ARM64EC. Annars är det odefinierat._WIN64Definieras som 1 när kompileringsmålet är 64-bitars ARM, x64 eller ARM64EC. Annars är det odefinierat._WINRT_DLLDefinieras som 1 när de kompileras som C++ och både/ZW(Windows Runtime-kompilering) och/LDeller/LDdkompilatoralternativ anges. Annars är det odefinierat.
Inga makron för förprocessorer som identifierar ATL- eller MFC-biblioteksversionen är fördefinierade av kompilatorn. ATL- och MFC-bibliotekshuvuden definierar dessa versionsmakron internt. De är odefinierade i förprocessordirektiv som gjorts innan det nödvändiga huvudet inkluderas.
_ATL_VERDefinieras i<atldef.h>som en heltalsliteral som kodar ATL-versionsnumret._MFC_VERDefinieras i<afxver_.h>som en heltalsliteral som kodar MFC-versionsnumret.
Se även
Makron (C/C++)
Operatorer för förprocessor
Direktiv för förprocessorer