Dela via


Fördefinierade makron

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 med char.

    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.

  • __cplusplus Definieras 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 #line direktiv. 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 /Za anges. 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 /std kompileras 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 /std kompileras 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 /std kompileras 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 /std kompileras som C och något av C11- eller C17-alternativen anges.

  • __STDC_VERSION__ Definieras när det kompileras som C och något av /std alternativen C11 eller C17 anges. Den expanderar till 201112L för /std:c11, och 201710L för /std:c17.

  • __STDCPP_DEFAULT_NEW_ALIGNMENT__ När /std:c17 eller senare anges expanderas makrot till en size_t literal som har värdet för justeringen som garanteras av ett anrop till alignment-unaware operator new. Större justering skickas till en justeringsmedveten överlagring, till exempel operator 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_ARCH Definieras 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:ATOM anges 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.2 kompilatorn 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.2 kompilator 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.2 kompilator 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.2 kompilator 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.2 kompilator 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.2 kompilator 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.2 kompilator 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.2 anges och kompilatormålet är x86 eller x64. Annars är det odefinierat.

  • _CHAR_UNSIGNED Definieras som 1 om standardtypen char är osignerad. Det här värdet definieras när kompilatoralternativet /J (Standardteckentyp är osignerad) anges. Annars är det odefinierat.

  • __CLR_VER Definieras som en heltalsliteral som representerar versionen av Common Language Runtime (CLR) som används för att kompilera appen. Värdet kodas i formuläret Mmmbbbbb, där M är huvudversionen av körningen, mm är delversionen av körningen och bbbbb är versionsnumret. __CLR_VER definieras om kompilatoralternativet /clr har angetts. Annars är det odefinierat.

    // clr_ver.cpp
    // compile with: /clr
    using namespace System;
    int main() {
       Console::WriteLine(__CLR_VER);
    }
    
  • _CONTROL_FLOW_GUARD Definieras 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. Konstruktorn exampleClass tar ett heltal som en parameter. I maindeklarerar programmet tre objekt av typen exampleClass, 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_cli Definieras som heltalsliteralt värde 200406 när det kompileras som C++ och ett /clr kompilatoralternativ anges. Annars är det odefinierat. När det definieras __cplusplus_cli gä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_winrt Definieras som heltalsliteralt värde 201009 när det kompileras som C++ och kompileringsalternativet /ZW (Windows Runtime-kompilering) anges. Annars är det odefinierat.

  • _CPPRTTI Definieras som 1 om kompilatoralternativet /GR (Aktivera Run-Time typinformation) har angetts. Annars är det odefinierat.

  • _CPPUNWIND Definieras 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.

  • _DEBUG Definieras som 1 när /LDdalternativet , /MDd, eller /MTd kompilator anges. Annars är det odefinierat.

  • _DLL Definieras som 1 när kompilatoralternativet /MD eller /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 /EP alternativet eller /P kompilatorn.

    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 /EP alternativet eller /P kompilatorn. När den kompileras för ett 64-bitarsmål är __cdecl anropskonventionen 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 /EP alternativet eller /P kompilatorn. Ett exempel på användning finns i makrot __FUNCDNAME__ .

  • _INTEGRAL_MAX_BITS Definierat 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_VOLATILE Definieras som 1 om kompilatoralternativet /volatile:iso har angetts. Annars är det odefinierat.

  • _KERNEL_MODE Definieras som 1 om kompilatoralternativet /kernel (Skapa binärt kernelläge) har angetts. Annars är det odefinierat.

  • _M_AMD64 Definieras som heltalsliteralvärdet 100 för kompileringar som riktar sig till x64-processorer eller ARM64EC. Annars är det odefinierat.

  • _M_ARM Definieras 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_ARMV7VE Definieras som 1 när kompileringsalternativet /arch:ARMv7VE anges för kompileringar som riktar sig till ARM-processorer. Annars är det odefinierat.

  • _M_ARM_FP Definierat som ett heltalsliteralt värde som anger vilket kompilatoralternativ som /arch angavs för ARM-processormål. Annars är det odefinierat.

    • Ett värde i intervallet 30–39 om inget ARM-alternativ /arch angavs, vilket anger att standardarkitekturen för ARM har angetts (VFPv3).

    • Ett värde i intervallet 40–49 om /arch:VFPv4 har angetts.

    • Mer information finns i /arch (ARM).

  • _M_ARM64 Definieras som 1 för kompileringar som är avsedda för ARM64. Annars är det odefinierat.

  • _M_ARM64EC Definieras som 1 för kompileringar som mål ARM64EC. Annars är det odefinierat.

  • _M_CEE Definieras som 001 om något /clr kompilatoralternativ (Common Language Runtime Compil) har angetts. Annars är det odefinierat.

  • _M_CEE_PURE Inaktuell från och med Visual Studio 2015. Definieras som 001 om kompilatoralternativet /clr:pure har angetts. Annars är det odefinierat.

  • _M_CEE_SAFE Inaktuell från och med Visual Studio 2015. Definieras som 001 om kompilatoralternativet /clr:safe har angetts. Annars är det odefinierat.

  • _M_FP_CONTRACT Tillgänglig från och med Visual Studio 2022. Definieras som 1 om kompilatoralternativet /fp:contract eller /fp:fast är inställt. Annars är det odefinierat.

  • _M_FP_EXCEPT Definieras som 1 om kompilatoralternativet /fp:except eller /fp:strict är inställt. Annars är det odefinierat.

  • _M_FP_FAST Definieras som 1 om kompilatoralternativet /fp:fast har angetts. Annars är det odefinierat.

  • _M_FP_PRECISE Definieras som 1 om kompilatoralternativet /fp:precise har angetts. Annars är det odefinierat.

  • _M_FP_STRICT Definieras som 1 om kompilatoralternativet /fp:strict har angetts. Annars är det odefinierat.

  • _M_IX86 Definieras 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_FP Definierat som ett heltalsliteralt värde som anger /arch det 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:IA32 har angetts.

    • 1 om kompilatoralternativet /arch:SSE har angetts.

    • 2 om /arch:SSE2alternativet , /arch:AVX, /arch:AVX2, /arch:AVX512, /arch:AVX10.1eller /arch:AVX10.2 kompilator angavs. Det här värdet är standardvärdet om ett /arch kompilatoralternativ inte har angetts. När /arch:AVX har angetts definieras även makrot __AVX__ . När /arch:AVX2 anges definieras båda __AVX__ och __AVX2__ även. När /arch:AVX512 anges definieras även , __AVX____AVX2__, __AVX512BW__, __AVX512CD__, __AVX512DQ__, __AVX512F__och __AVX512VL__ . När /arch:AVX10.1 eller /arch:AVX10.2 har angetts definieras även , __AVX2____AVX__, __AVX512BW__, __AVX512CD__, __AVX512DQ____AVX512F__och __AVX512VL____AVX10_VER__ .

    • Mer information finns i /arch (x86).

  • _M_X64 Definieras som heltalsliteralvärdet 100 för kompileringar som riktar sig till x64-processorer eller ARM64EC. Annars är det odefinierat.

  • _MANAGED Definieras som 1 när kompilatoralternativet /clr anges. Annars är det odefinierat.

  • _MSC_BUILD Definieras 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_BUILD 1. Det här makrot är alltid definierat.

  • _MSC_EXTENSIONS Definieras som 1 om kompileringsalternativet on-by-default /Ze (Aktivera språktillägg) har angetts . Annars är det odefinierat.

  • _MSC_FULL_VER Definieras 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 . Ange cl /? 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_VER att de skiljs åt.

  • _MSC_VER Definieras 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_VER 1700. Ange cl /? 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_VER med 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
    // . . .
    #endif
    

    Mer 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_LANG Definieras 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ärde 201402L som standard, eller när kompilatoralternativet /std:c++14 har angetts. Makrot är inställt på 201703L om kompilatoralternativet /std:c++17 har angetts. Makrot är inställt på 202002L om kompilatoralternativet /std:c++20 har angetts. Det är inställt på ett högre, ospecificerat värde när /std:c++latest alternativet anges. Annars är makrot odefinierat. Kompilatoralternativen _MSVC_LANG makro och /std (Ange språkstandardversion) är tillgängliga från och med Visual Studio 2015 Update 3.

  • __MSVC_RUNTIME_CHECKS Definieras som 1 när ett av kompilatoralternativen /RTC anges. 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:preprocessor har 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:preprocessor har 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:preprocessor ersätter den inaktuella /experimental:preprocessor).
    #if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
    // Logic using the traditional preprocessor
    #else
    // Logic using cross-platform compatible preprocessor
    #endif
    
  • _MTDefinieras som 1 när /MD eller /MDd (Multithreaded DLL)eller/MT/MTd (Multithreaded) anges. Annars är det odefinierat.

  • _NATIVE_WCHAR_T_DEFINED Definieras som 1 när kompilatoralternativet /Zc:wchar_t anges. Annars är det odefinierat.

  • _OPENMP Definieras 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 /analyze anges. 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=address anges. 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-funktionen asctime , till exempel Fri 19 Aug 13:32:58 2016. Det här makrot är alltid definierat.

  • _VC_NODEFAULTLIB Definieras som 1 när kompilatoralternativet /Zl (Utelämna standardbiblioteksnamn) anges. Annars är det odefinierat.

  • _WCHAR_T_DEFINED Definieras som 1 när standardkompilatoralternativet /Zc:wchar_t anges. Makrot _WCHAR_T_DEFINED definieras men har inget värde om kompilatoralternativet /Zc:wchar_t- har angetts och wchar_t definieras i en systemhuvudfil som ingår i projektet. Annars är det odefinierat.

  • _WIN32 Definieras som 1 när kompileringsmålet är 32-bitars ARM, 64-bitars ARM, x86, x64 eller ARM64EC. Annars är det odefinierat.

  • _WIN64 Definieras som 1 när kompileringsmålet är 64-bitars ARM, x64 eller ARM64EC. Annars är det odefinierat.

  • _WINRT_DLL Definieras som 1 när de kompileras som C++ och både /ZW (Windows Runtime-kompilering) och /LD eller /LDd kompilatoralternativ 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_VER Definieras i <atldef.h> som en heltalsliteral som kodar ATL-versionsnumret.

  • _MFC_VER Definieras 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