Megosztás a következőn keresztül:


Előre definiált makrók

A Microsoft C/C++ fordító (MSVC) előre definiál bizonyos előprocesszor-makrókat a nyelvtől (C vagy C++), a fordítási céltól és a választott fordítóbeállításoktól függően.

Az MSVC támogatja az ANSI/ISO C99, C11 és C17 szabványok, valamint az ISO C++14, C++17 és C++20 szabványok által megkövetelt előre definiált előfeldolgozó makrókat. Az implementáció számos további Microsoft-specifikus előfeldolgozó makrót is támogat.

Egyes makrók csak adott buildkörnyezetekhez vagy fordítóbeállításokhoz vannak definiálva. A feljegyzett esetek kivételével a makrók úgy vannak definiálva a fordítási egységben, mintha fordítóbeállítás-argumentumként /D lennének megadva. Definiáláskor az előfeldolgozó kibontja a makrók megadott értékeit a fordítás előtt. Az előre definiált makrók nem vesznek fel argumentumokat, és nem definiálhatók újra.

Standard előre definiált azonosító

A fordító támogatja az ISO C99 és az ISO C++11 által megadott előre definiált azonosítót.

  • __func__A belefoglaló függvény nem minősített és nem hitelesített neve függvény-helyi statikus konstanstömbkéntchar.

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

Standard előre definiált makrók

A fordító támogatja az ISO C99, C11, C17 és ISO C++17 szabványok által meghatározott előre definiált makrókat.

  • __cplusplus A fordítási egység C++-ként való lefordításakor egész számkonstansértékként van definiálva. Ellenkező esetben nincs definiálva.

  • __DATE__ Az aktuális forrásfájl fordítási dátuma. A dátum az Mmm dd yyyyy form állandó hosszúságú sztringkonstansa. Az Mmm hónapnév megegyezik a C Runtime Library (CRT) asctime függvény által létrehozott rövidített hónapnévvel. A dátum dd első karaktere egy szóköz, ha az érték kisebb, mint 10. Ez a makró mindig definiálva van.

  • __FILE__ Az aktuális forrásfájl neve. __FILE__ karaktersztring-literálra bont. A fájl teljes elérési útjának megjelenítéséhez használja /FC a (Diagnosztika forráskódfájljának teljes elérési útját). Ez a makró mindig definiálva van.

  • __LINE__ Az aktuális forrásfájl egész sorszámaként definiálva. Ennek a makrónak az értéke egy #line irányelv használatával módosítható. Az érték integráltípusa __LINE__ a környezettől függően változhat. Ez a makró mindig definiálva van.

  • __STDC__ 1-ként van definiálva, amikor C-ként van lefordítva, és ha a /Za fordító beállítás meg van adva. A Visual Studio 2022 17.2-es verziójától kezdve az 1-es értékként van definiálva, amikor C-ként van lefordítva, és ha a /Zc:__STDC__ fordító beállítás meg van adva. Ellenkező esetben nincs definiálva.

  • __STDC_HOSTED__ 1-ként definiálva, ha a megvalósítás egy üzemeltetett implementáció, amely a teljes szükséges standard kódtárat támogatja. Ellenkező esetben 0-ként van definiálva.

  • __STDC_NO_ATOMICS__ 1-ként van definiálva, ha az implementáció nem támogatja az opcionális standard atomokat. Az MSVC-implementáció 1-ként határozza meg, amikor C-ként van lefordítva, és meg van adva a /std C11 vagy C17 egyik lehetőség.

  • __STDC_NO_COMPLEX__ 1-ként van definiálva, ha az implementáció nem támogatja az opcionális standard összetett számokat. Az MSVC-implementáció 1-ként határozza meg, amikor C-ként van lefordítva, és meg van adva a /std C11 vagy C17 egyik lehetőség.

  • __STDC_NO_THREADS__ 1-ként van definiálva, ha az implementáció nem támogatja az opcionális standard szálakat. Az MSVC-implementáció 1-ként határozza meg, amikor C-ként van lefordítva, és meg van adva a /std C11 vagy C17 egyik lehetőség.

  • __STDC_NO_VLA__ 1-ként van definiálva, ha az implementáció nem támogatja a standard változóhosszúságú tömböket. Az MSVC-implementáció 1-ként határozza meg, amikor C-ként van lefordítva, és meg van adva a /std C11 vagy C17 egyik lehetőség.

  • __STDC_VERSION__ A C-ként való fordításkor és a /std C11 vagy C17 beállítások egyikének megadása meg van adva. Kiterjeszti a 201112L következőre /std:c11: 201710L és a /std:c17.

  • __STDCPP_DEFAULT_NEW_ALIGNMENT__ Ha /std:c17 meg van adva vagy újabb, ez a makró egy size_t literálra bővül, amely az igazítást nem tudó operator newhívás által garantált igazítási értékkel rendelkezik. A nagyobb igazítások egy igazításérzékeny túlterhelésnek lesznek átadva, például operator new(std::size_t, std::align_val_t). További információ: /Zc:alignedNew (C++17 túligazolt foglalás).

  • __STDCPP_THREADS__ Ha és csak akkor, ha egy program több végrehajtási szállal is rendelkezhet, és C++-ként van lefordítva. Ellenkező esetben nincs definiálva.

  • __TIME__ Az előre feldolgozott fordítási egység fordításának időpontja. Az idő a hh:mm:ss űrlap karaktersztring-literálja, ugyanaz, mint a CRT asctime függvény által visszaadott idő. Ez a makró mindig definiálva van.

Microsoft-specifikus előre definiált makrók

Az MSVC más előre definiált makrókat is támogat:

  • __ARM_ARCH Az ARM-architektúra verzióját képviselő egész számkonstansként definiálva. Az érték a Armv8-A architektúrához 8-as értékként van definiálva. A 8.1-es és újabb verziók esetében az érték az ARM C nyelvi bővítmény által meghatározott X * 100 + Y képlettel skálázható az alverziókra, például az X.Y-ra. Az Armv8.1 __ARM_ARCH esetében például 8 * 100 + 1 vagy 801. Az ARM-architektúra verziójának beállításához lásd: /arch (ARM64). Ez a makró a Visual Studio 2022 17.10-es verziójában lett bevezetve.

  • __ATOM__ 1-ként definiálva, ha a /favor:ATOM fordító beállítás be van állítva, és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX__1-ként van definiálva, amikor a /arch:AVX, , /arch:AVX2vagy /arch:AVX512 a fordító beállításai meg vannak adva, /arch:AVX10.1 és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX2__1-ként van definiálva, ha az /arch:AVX2, vagy /arch:AVX512 a fordító beállítás be van állítva, /arch:AVX10.1 és a fordító célja x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX512BW__1-ként van definiálva, ha a vagy /arch:AVX512 a /arch:AVX10.1 fordító beállítás be van állítva, és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX512CD__1-ként van definiálva, ha a vagy /arch:AVX512 a /arch:AVX10.1 fordító beállítás be van állítva, és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX512DQ__1-ként van definiálva, ha a vagy /arch:AVX512 a /arch:AVX10.1 fordító beállítás be van állítva, és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX512F__1-ként van definiálva, ha a vagy /arch:AVX512 a /arch:AVX10.1 fordító beállítás be van állítva, és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX512VL__1-ként van definiálva, ha a vagy /arch:AVX512 a /arch:AVX10.1 fordító beállítás be van állítva, és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • __AVX10_VER__ Egész számként definiálva, amely az AVX10 verzióját jelöli, amikor a /arch:AVX10.1 fordító beállítás be van állítva, és a fordító célértéke x86 vagy x64. Ellenkező esetben nincs definiálva.

  • _CHAR_UNSIGNED 1-ként van definiálva, ha az alapértelmezett char típus nincs aláírva. Ez az érték akkor van definiálva, ha az /J (alapértelmezett karaktertípus nincs aláírva) fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • __CLR_VER Egész számkonstansként definiálva, amely az alkalmazás fordításához használt Common Language Runtime (CLR) verzióját jelöli. Az érték a futtatókörnyezet főverzióját tartalmazó formában Mmmbbbbbvan kódolva, M a futtatókörnyezet alverziója, és mm a buildszám.bbbbb __CLR_VER akkor van definiálva, ha a /clr fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

    // clr_ver.cpp
    // compile with: /clr
    using namespace System;
    int main() {
       Console::WriteLine(__CLR_VER);
    }
    
  • _CONTROL_FLOW_GUARD 1-ként definiálva, ha a /guard:cf (Control Flow Guard engedélyezése) fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • __COUNTER__ 0-ás kezdetű egész számkonstansra bont. Az érték minden alkalommal 1-zel nő, amikor egy forrásfájlban vagy a forrásfájl belefoglalt fejléceiben használják. __COUNTER__ az előre összeállított fejlécek használatakor megjegyzi annak állapotát. Ez a makró mindig definiálva van.

    Ez a példa arra használ __COUNTER__ , hogy egyedi azonosítókat rendeljen három különböző, azonos típusú objektumhoz. A exampleClass konstruktor paraméterként egy egész számot vesz fel. Ebben mainaz alkalmazásban az alkalmazás három típusú exampleClassobjektumot deklarál, egyedi azonosítóparaméterként használva __COUNTER__ :

    // 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 A C++-ként való fordításkor 200406 egész szám konstansértékként van definiálva, és be van állítva egy /clr fordítóbeállítás. Ellenkező esetben nincs definiálva. A definiált szöveg __cplusplus_cli a fordítási egység egészében érvényben van.

    // 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 A C++-ként való fordításkor 201009 egész szám konstansértékként van definiálva, és a /ZW (Windows Futtatókörnyezet fordítása) fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _CPPRTTI 1-ként van definiálva, ha a /GR (Típusadatok engedélyezése Run-Time) fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _CPPUNWIND 1-ként van definiálva, ha egy /GX vagy több (Kivételkezelés engedélyezése), /clr (Common Language Runtime-fordítás) vagy /EH (Kivételkezelési modell) fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _DEBUG 1-ként van definiálva, ha a /LDd, /MDdvagy /MTd a fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _DLL 1-ként van definiálva, ha a /MD vagy /MDd a (többszálas DLL) fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • __FUNCDNAME__ Sztringkonstansként definiálva, amely a mellékfüggvény kitüntetett nevét tartalmazza. A makró csak egy függvényen belül van definiálva. A __FUNCDNAME__ makró nem lesz kibontva, ha a fordítót vagy /EP a /P fordítót használja.

    Ez a példa a __FUNCDNAME__, __FUNCSIG__és __FUNCTION__ a makrók használatával jeleníti meg a függvényinformációkat.

    // 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__ Sztringkonstansként definiálva, amely tartalmazza a belefoglaló függvény aláírását. A makró csak egy függvényen belül van definiálva. A __FUNCSIG__ makró nem lesz kibontva, ha a fordítót vagy /EP a /P fordítót használja. Ha egy 64 bites célhoz van lefordítva, a hívási konvenció alapértelmezés szerint érvényes __cdecl . A használat példáiért tekintse meg a makrót __FUNCDNAME__ .

  • __FUNCTION__ Sztringkonstansként definiálva, amely a beágyazási függvény fel nem használt nevét tartalmazza. A makró csak egy függvényen belül van definiálva. A __FUNCTION__ makró nem lesz kibontva, ha a fordítót vagy /EP a /P fordítót használja. A használat példáiért tekintse meg a makrót __FUNCDNAME__ .

  • _INTEGRAL_MAX_BITS A 64-es egész számkonstansértékként definiálva egy nem vektoros integráltípus maximális mérete (bitekben). Ez a makró mindig definiálva van.

    // integral_max_bits.cpp
    #include <stdio.h>
    int main() {
        printf("%d\n", _INTEGRAL_MAX_BITS);
    }
    
  • __INTELLISENSE__ Az IntelliSense fordítói átadása során 1-ként definiálva a Visual Studio IDE-ben. Ellenkező esetben nincs definiálva. Ezzel a makróval védheti az IntelliSense fordító által nem értelmezett kódokat, vagy válthat a build és az IntelliSense fordító között. További információ: Hibaelhárítási tippek az IntelliSense lassúságával kapcsolatban.

  • _ISO_VOLATILE 1-ként van definiálva, ha a /volatile:iso fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _KERNEL_MODE 1-ként van definiálva, ha a /kernel (Kernel módú bináris ) fordító beállítása be van állítva. Ellenkező esetben nincs definiálva.

  • _M_AMD64 Az x64-processzorokat vagy ARM64EC megcélzó fordítások 100-as egész számkonstansértékeként definiálva. Ellenkező esetben nincs definiálva.

  • _M_ARM Az ARM-processzorokat megcélzó fordítások 7 egész számkonstansértékeként definiálva. Arm64, ARM64EC és egyéb célok esetében nincs meghatározva.

  • _M_ARM_ARMV7VE 1-ként van definiálva, ha a /arch:ARMv7VE fordító beállítása ARM-processzorokat célzó fordításokhoz van beállítva. Ellenkező esetben nincs definiálva.

  • _M_ARM_FP Egész szám konstansértékként definiálva, amely azt jelzi, hogy melyik /arch fordítóbeállítás lett beállítva ARM-processzorcélokhoz. Ellenkező esetben nincs definiálva.

    • A 30–39 tartományban lévő érték, ha nem /arch adott meg ARM-beállítást, az ARM alapértelmezett architektúrájának beállítását (VFPv3).

    • Ha be van állítva, akkor a tartomány értéke 40–49 /arch:VFPv4 .

    • További információ: /arch (ARM).

  • _M_ARM64 Az ARM64-et célzó fordításokhoz 1-ként van definiálva. Ellenkező esetben nincs definiálva.

  • _M_ARM64EC Az ARM64EC megcélzott fordításokhoz 1-ként van definiálva. Ellenkező esetben nincs definiálva.

  • _M_CEE 001-ként van definiálva, ha a /clr (Common Language Runtime Compilation) fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_CEE_PURE Elavult a Visual Studio 2015-ben. 001-ként van definiálva, ha a /clr:pure fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_CEE_SAFE Elavult a Visual Studio 2015-ben. 001-ként van definiálva, ha a /clr:safe fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_FP_CONTRACT A Visual Studio 2022-től kezdve érhető el. 1-ként van definiálva, ha a fordító vagy /fp:contract a /fp:fast fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_FP_EXCEPT1-ként van definiálva, ha a fordító vagy /fp:except a /fp:strict fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_FP_FAST 1-ként van definiálva, ha a /fp:fast fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_FP_PRECISE 1-ként van definiálva, ha a /fp:precise fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_FP_STRICT 1-ként van definiálva, ha a /fp:strict fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _M_IX86 Az x86-processzorokat megcélzó fordítások 600-as egész számkonstansértékeként definiálva. Ez a makró nincs definiálva x64- vagy ARM-fordítási célokhoz.

  • _M_IX86_FP Olyan egész számkonstansértékként definiálva, amely a /arch beállított fordítóbeállítást vagy az alapértelmezett értéket jelzi. Ez a makró mindig akkor van definiálva, ha a fordítási cél egy x86-os processzor. Ellenkező esetben nincs definiálva. Definiáláskor az érték a következő:

    • 0, ha a /arch:IA32 fordító beállítás be van állítva.

    • 1, ha a /arch:SSE fordító beállítás be van állítva.

    • 2, ha a /arch:SSE2, /arch:AVX, /arch:AVX2, /arch:AVX512 vagy /arch:AVX10.1 fordító beállítás be van állítva. Ez az érték az alapértelmezett érték, ha nincs /arch megadva fordítóbeállítás. Ha /arch:AVX meg van adva, a makró __AVX__ is definiálva van. Ha /arch:AVX2 meg van adva, mindkettő __AVX__ és __AVX2__ definiálva is van. Ha /arch:AVX512 meg van adva, __AVX__, __AVX2__, __AVX512BW____AVX512CD__, , __AVX512DQ__, , és __AVX512F____AVX512VL__ definiálva is van. Ha /arch:AVX10.1 meg van adva, __AVX__, __AVX2__, __AVX512BW____AVX512CD__, , __AVX512DQ__, , és __AVX512F____AVX512VL____AVX10_VER__ definiálva is van.

    • További információ: /arch (x86).

  • _M_X64 Az x64-processzorokat vagy ARM64EC megcélzó fordítások 100-as egész számkonstansértékeként definiálva. Ellenkező esetben nincs definiálva.

  • _MANAGED 1-ként van definiálva, ha a /clr fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _MSC_BUILD Egész számkonstansként definiálva, amely a fordító verziószámának változatszámelemét tartalmazza. A változatszám a ponthatárolt verziószám utolsó eleme. Ha például a Microsoft C/C++ fordító verziószáma 15.00.20706.01, akkor a _MSC_BUILD makró 1. Ez a makró mindig definiálva van.

  • _MSC_EXTENSIONS 1-ként van definiálva, ha a on-by-default /Ze (Enable Language Extensions) fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _MSC_FULL_VER Egész számkonstansként definiálva, amely a fordító verziószámának fő, alverzió- és buildszámelemeit kódolja. A fő szám a ponthatárolt verziószám első eleme, az alszám a második elem, a buildszám pedig a harmadik elem.

    Ha például a Microsoft C/C++ fordítóverziója 19.39.33519, _MSC_FULL_VER akkor 193933519. Írja be cl /? a parancssorba a fordító verziószámának megtekintéséhez. Ez a makró mindig definiálva van. A fordítóverziókról további információt a Visual Studio 2017-től kezdődő C++ fordítóverziókkal és kifejezetten a Visual Studio 2017-es kiadásaival kapcsolatos további információkért talál a Visual Studio 2019 16.8-ról, 16.9-es, 16.10-es és 16.11-es verziójáról, amelyek megkülönböztetik őket._MSC_FULL_VER

  • _MSC_VER Egész számkonstansként definiálva, amely a fordító verziószámának fő és alszám elemeit kódolja. A fő szám a ponthatárolt verziószám első eleme, az alszám pedig a második elem. Ha például a Microsoft C/C++ fordító verziószáma 17.00.51106.1, az érték _MSC_VER 1700. Írja be cl /? a parancssorba a fordító verziószámának megtekintéséhez. Ez a makró mindig definiálva van.

    Ha a Visual Studio egy adott verziójában vagy újabb verziójában szeretné tesztelni a fordító kiadásait vagy frissítéseit, használja az operátort >= . Feltételes direktívában _MSC_VER összehasonlíthatja az ismert verzióval. Ha több, egymástól kölcsönösen kizáró verziót szeretne összehasonlítani, a verziószám csökkenő sorrendjében rendezze az összehasonlításokat. Ez a kód például a Visual Studio 2017-ben és újabb verzióiban kiadott fordítókat ellenőrzi. Ezután ellenőrzi a Visual Studio 2015-ben vagy azt követően kiadott fordítókat. Ezután ellenőrzi a Visual Studio 2015 előtt kiadott összes fordítót:

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

    A Visual Studio 2019 16.8 és 16.9, illetve 16.10 és 16.11 verziójával kapcsolatos további információkért, amelyek azonos fő- és alverziókat használnak (és így azonos értékkel _MSC_VERrendelkeznek) lásd a Visual Studio 2017-től kezdődő szolgáltatáskiadásokat.

    A fordító verziószámozásának előzményeiről, a fordító verziószámairól és az általuk megfelelő Visual Studio-verziókról további információt a C++ fordítóverzió-verziószámozás című témakörben talál. A Visual C++ Fordítóverzió a Microsoft C++ csapat blogján is megtalálható.

  • _MSVC_LANG Egész számkonstansként definiálva, amely meghatározza a fordító által megcélzott C++ nyelvi szabványt. Csak a C++-ként lefordított kód állítja be. A makró alapértelmezés szerint az egész szám konstansértéke 201402L , vagy ha a /std:c++14 fordító beállítás meg van adva. A makró beállítása akkor történik, 201703L ha a /std:c++17 fordító beállítás meg van adva. A makró beállítása akkor történik, 202002L ha a /std:c++20 fordító beállítás meg van adva. A beállítás megadásakor /std:c++latest magasabb, meghatározatlan értékre van állítva. Ellenkező esetben a makró nincs definiálva. A _MSVC_LANG Visual Studio 2015 3. frissítésében elérhető a makró- és /std a (nyelvi szabványverzió megadása) fordító beállításai.

  • __MSVC_RUNTIME_CHECKS 1-ként van definiálva, ha az /RTC egyik fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _MSVC_TRADITIONAL:

    • A Visual Studio 2017 15.8-as verziójától kezdve érhető el: 0-ként definiálva, ha be van állítva az előfeldolgozási konformitási mód /experimental:preprocessor fordítóbeállítása. Alapértelmezés szerint 1-ként van definiálva, vagy ha a /experimental:preprocessor- fordítóbeállítás be van állítva, jelezve, hogy a hagyományos előfeldolgozó használatban van.
    • A Visual Studio 2019 16.5-ös verziójától kezdve érhető el: 0-ként definiálva, ha be van állítva az előfeldolgozási konformitási mód /Zc:preprocessor fordítóbeállítása. Alapértelmezés szerint 1-ként van definiálva, vagy ha a /Zc:preprocessor- fordító beállítás be van állítva, jelezve, hogy a hagyományos előfeldolgozó használatban van (lényegében /Zc:preprocessor az elavultat /experimental:preprocessorhelyettesíti).
    #if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
    // Logic using the traditional preprocessor
    #else
    // Logic using cross-platform compatible preprocessor
    #endif
    
  • _MT1-ként van definiálva, ha /MD vagy /MDd (többszálú DLL)vagy/MT/MTd (többszálas) van megadva. Ellenkező esetben nincs definiálva.

  • _NATIVE_WCHAR_T_DEFINED 1-ként van definiálva, ha a /Zc:wchar_t fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _OPENMP Ha az /openmp OpenMP 2.0 támogatás engedélyezése beállítás be van állítva, akkor egész számkonstansként 200203 definiálva. Ez az érték az MSVC által implementált OpenMP-specifikáció dátumát jelöli. Ellenkező esetben nincs definiálva.

    // _OPENMP_dir.cpp
    // compile with: /openmp
    #include <stdio.h>
    int main() {
        printf("%d\n", _OPENMP);
    }
    
  • _PREFAST_ 1-ként van definiálva, ha a /analyze fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • __SANITIZE_ADDRESS__ A Visual Studio 2019 16.9-es verziójától kezdve érhető el. 1-ként van definiálva, ha a /fsanitize=address fordító beállítás be van állítva. Ellenkező esetben nincs definiálva.

  • __TIMESTAMP__ Sztringkonstansként definiálva, amely az aktuális forrásfájl utolsó módosításának dátumát és időpontját tartalmazza a CRT asctime függvény által visszaadott rövidített, állandó hosszúságú űrlapon, Fri 19 Aug 13:32:58 2016például. Ez a makró mindig definiálva van.

  • _VC_NODEFAULTLIB 1-ként van definiálva, ha az /Zl (Alapértelmezett kódtárnév kihagyása) fordítóbeállítás be van állítva. Ellenkező esetben nincs definiálva.

  • _WCHAR_T_DEFINED 1-ként van definiálva, ha az alapértelmezett /Zc:wchar_t fordítóbeállítás be van állítva. A _WCHAR_T_DEFINED makró definiálva van, de nincs értéke, ha a /Zc:wchar_t- fordító beállítás be van állítva, és wchar_t a projektben található rendszerfejlécfájlban van definiálva. Ellenkező esetben nincs definiálva.

  • _WIN32 1-ként van definiálva, ha a fordítási cél 32 bites ARM, 64 bites ARM, x86 vagy x64. Ellenkező esetben nincs definiálva.

  • _WIN64 1-ként van definiálva, ha a fordítási cél 64 bites ARM vagy x64. Ellenkező esetben nincs definiálva.

  • _WINRT_DLLC++ fordításkor 1-ként van definiálva, és mindkettő /ZW (Windows Futtatókörnyezet fordítása)és/LD/LDd a fordító beállításai is meg vannak adva. Ellenkező esetben nincs definiálva.

A fordító nem definiál előre olyan előfeldolgozó makrókat, amelyek azonosítják az ATL- vagy MFC-kódtár verzióját. Az ATL- és MFC-kódtárfejlécek belsőleg határozzák meg ezeket a verziómakrókat. Az előfeldolgozási irányelvek nem definiálják őket, mielőtt a szükséges fejlécet belefoglalják.

  • _ATL_VER <atldef.h> Az ATL-verziószámot kódoló egész számkonstansként definiálva.

  • _MFC_VER <afxver_.h> Az MFC-verziószámot kódoló egész számkonstansként definiálva.

Lásd még

Makrók (C/C++)
Előfeldolgozó operátorok
Előfeldolgozási irányelvek