Sdílet prostřednictvím


Předdefinovaná makra

Kompilátor Microsoft C/C++ (MSVC) předdefinuje určitá makra preprocesoru v závislosti na jazyce (C nebo C++), cíli kompilace a zvolených možnostech kompilátoru.

MSVC podporuje předdefinovaná makra preprocesoru vyžadovaná standardy ANSI/ISO C99, C11 a C17 a ISO C++14, C++17 a C++20. Implementace také podporuje několik dalších maker preprocesoru specifických pro Microsoft.

Některá makra jsou definována pouze pro konkrétní prostředí sestavení nebo možnosti kompilátoru. Pokud není uvedeno, makra jsou definována v celé jednotce překladu, jako by byly zadány jako /D argumenty možností kompilátoru. Při definování preprocesor rozbalí makra před kompilací jejich zadané hodnoty. Předdefinovaná makra nepřebírají žádné argumenty a nelze je znovu definovat.

Standardní předdefinovaný identifikátor

Kompilátor podporuje tento předdefinovaný identifikátor určený ISO C99 a ISO C++11.

  • __func__Nekvalifikovaný a neoznamenaný název ohraničující funkce jako pole statických constů charfunkce místní funkce .

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

Standardní předdefinovaná makra

Kompilátor podporuje tato předdefinovaná makra určená standardy ISO C99, C11, C17 a ISO C++17.

  • __cplusplus Definováno jako celočíselná hodnota literálu při kompilaci jednotky překladu jako C++. Jinak není definováno.

  • __DATE__ Datum kompilace aktuálního zdrojového souboru. Datum je řetězcový literál konstantní délky formuláře Mmm dd yyyy. Název měsíce Mmm je stejný jako zkrácený název měsíce vygenerovaný funkcí C Runtime Library (CRT). První znak data dd je mezera, pokud je hodnota menší než 10. Toto makro je vždy definováno.

  • __FILE__ Název aktuálního zdrojového souboru. __FILE__ rozbalí literál řetězce znaků. Pokud chcete zajistit, aby se zobrazila úplná cesta k souboru, použijte /FC (úplná cesta k souboru zdrojového kódu v diagnostice). Toto makro je vždy definováno.

  • __LINE__ Definuje se jako celé číslo řádku v aktuálním zdrojovém souboru. Hodnotu tohoto makra lze změnit pomocí direktivy #line . Celočíselný typ hodnoty __LINE__ se může lišit v závislosti na kontextu. Toto makro je vždy definováno.

  • __STDC__ Definováno jako 1 při kompilaci jako C a pokud je zadána možnost kompilátoru /Za . Počínaje sadou Visual Studio 2022 verze 17.2 se při kompilaci jako C definuje jako 1 a pokud je zadána možnost kompilátoru /std:c11 /std:c17 . Jinak není definováno.

  • __STDC_HOSTED__ Definuje se jako 1, pokud je implementace hostovaná implementace, která podporuje celou požadovanou standardní knihovnu. V opačném případě je definováno jako 0.

  • __STDC_NO_ATOMICS__ Definuje se jako 1, pokud implementace nepodporuje volitelné standardní atomy. Implementace MSVC ji definuje jako 1 při kompilaci jako C a jedna z /std možností C11 nebo C17 je zadána.

  • __STDC_NO_COMPLEX__ Definuje se jako 1, pokud implementace nepodporuje volitelná standardní komplexní čísla. Implementace MSVC ji definuje jako 1 při kompilaci jako C a jedna z /std možností C11 nebo C17 je zadána.

  • __STDC_NO_THREADS__ Definuje se jako 1, pokud implementace nepodporuje volitelná standardní vlákna. Implementace MSVC ji definuje jako 1 při kompilaci jako C a jedna z /std možností C11 nebo C17 je zadána.

  • __STDC_NO_VLA__ Definuje se jako 1, pokud implementace nepodporuje pole standardních proměnných délky. Implementace MSVC ji definuje jako 1 při kompilaci jako C a jedna z /std možností C11 nebo C17 je zadána.

  • __STDC_VERSION__ Je definována při kompilaci jako C a je zadána jedna z /std možností C11 nebo C17. Rozbalí 201112L se pro /std:c11, a 201710L pro /std:c17.

  • __STDCPP_DEFAULT_NEW_ALIGNMENT__ Pokud /std:c17 je zadáno nebo později, toto makro se rozšíří na size_t literál, který má hodnotu zarovnání zaručené voláním zarovnání bez vědomí operator new. Větší zarovnání se předávají přetížení s podporou zarovnání, například operator new(std::size_t, std::align_val_t). Další informace najdete v tématu /Zc:alignedNew (Přidělení zarovnané přes c++17).

  • __STDCPP_THREADS__ Definováno jako 1, pokud a pouze v případě, že program může mít více než jedno vlákno provádění a zkompilováno jako C++. Jinak není definováno.

  • __TIME__ Čas překladu předzpracované jednotky překladu. Čas je řetězcový literál znaku formuláře hh:mm:ss, který je stejný jako čas vrácený funkcí CRT asctime . Toto makro je vždy definováno.

Předdefinovaná makra specifická pro Microsoft

MSVC podporuje další předdefinovaná makra:

  • __ARM_ARCH Definuje se jako celočíselná literála, která představuje verzi architektury ARM. Hodnota je definována jako 8 pro architekturu Armv8-A. U verze 8.1 a novější se hodnota škáluje pro podverze, jako je X.Y, pomocí vzorce X * 100 + Y definovaného rozšířením jazyka ARM C. Například pro Armv8.1 __ARM_ARCH je 8 * 100 + 1 nebo 801. Informace o nastavení verze architektury ARM najdete v tématu /arch (ARM64). Toto makro bylo zavedeno v sadě Visual Studio 2022 verze 17.10.

  • __ATOM__ Definováno jako 1, pokud /favor:ATOM je nastavena možnost kompilátoru a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX__Definováno jako 1 při /arch:AVX/arch:AVX2/arch:AVX512 nastavení , nebo /arch:AVX10.1 možnosti kompilátoru a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX2__ Definováno jako 1, pokud /arch:AVX2je nastavena možnost nebo /arch:AVX512 /arch:AVX10.1 kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX512BW__ Definováno jako 1, pokud /arch:AVX512 je nastavena možnost nebo /arch:AVX10.1 kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX512CD__ Definováno jako 1, pokud /arch:AVX512 je nastavena možnost nebo /arch:AVX10.1 kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX512DQ__ Definováno jako 1, pokud /arch:AVX512 je nastavena možnost nebo /arch:AVX10.1 kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX512F__ Definováno jako 1, pokud /arch:AVX512 je nastavena možnost nebo /arch:AVX10.1 kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX512VL__ Definováno jako 1, pokud /arch:AVX512 je nastavena možnost nebo /arch:AVX10.1 kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • __AVX10_VER__ Definováno jako celé číslo, které představuje verzi AVX10 při /arch:AVX10.1 nastavení možnosti kompilátoru a cíl kompilátoru je x86 nebo x64. Jinak není definováno.

  • _CHAR_UNSIGNED Je definován jako 1, pokud je výchozí char typ bez znaménka. Tato hodnota je definována, když je nastavena možnost kompilátoru /J (výchozí typ znaku je bez znaménka). Jinak není definováno.

  • __CLR_VER Definováno jako celočíselné literál, který představuje verzi modulu CLR (Common Language Runtime), která se používá ke kompilaci aplikace. Hodnota je kódována ve formuláři Mmmbbbbb, kde M je hlavní verzí modulu runtime, mm je podverze modulu runtime a bbbbb je číslo buildu. __CLR_VER je definována, pokud je nastavena možnost kompilátoru /clr . Jinak není definováno.

    // clr_ver.cpp
    // compile with: /clr
    using namespace System;
    int main() {
       Console::WriteLine(__CLR_VER);
    }
    
  • _CONTROL_FLOW_GUARD Definuje se jako 1, když je nastavena možnost kompilátoru /guard:cf (Povolit ochranu toku řízení ). Jinak není definováno.

  • __COUNTER__ Rozbalí se na celočíselnou literál, který začíná na 0. Hodnota se zvýší o 1 při každém použití ve zdrojovém souboru nebo v zahrnutých hlavičkách zdrojového souboru. __COUNTER__ při použití předkompilovaných hlaviček si pamatuje jeho stav. Toto makro je vždy definováno.

    Tento příklad používá __COUNTER__ k přiřazení jedinečných identifikátorů třem různým objektům stejného typu. Konstruktor exampleClass přebírá celé číslo jako parametr. V mainaplikaci deklaruje tři objekty typu exampleClasspomocí __COUNTER__ jako parametr jedinečného identifikátoru:

    // 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 Je definována jako celočíselná hodnota literálu 200406 při kompilaci jako C++ a je nastavena možnost kompilátoru /clr . Jinak není definováno. Pokud je definováno, __cplusplus_cli platí v celé jednotce překladu.

    // 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_winrtJe definována jako celočíselná hodnota literálu 201009 při kompilaci jako C++ a je nastavena možnost kompilátoru /ZW (prostředí Windows Runtime Kompilace). Jinak není definováno.

  • _CPPRTTIJe definován jako 1, pokud je nastavena možnost kompilátoru /GR (Povolit informace o typu za běhu). Jinak není definováno.

  • _CPPUNWINDJe definováno jako 1, pokud jsou nastaveny některé možnosti kompilátoru kompilátoru /GX (Povolit zpracování výjimek),/clr (kompilace modulu Common Language Runtime) nebo /EH (Model zpracování výjimek). Jinak není definováno.

  • _DEBUG Definováno jako 1, pokud je nastavena /LDdmožnost , /MDdnebo /MTd kompilátoru. Jinak není definováno.

  • _DLL Definováno jako 1, pokud je nastavena možnost kompilátoru /MD nebo /MDd (Multithreaded DLL). Jinak není definováno.

  • __FUNCDNAME__ Definuje se jako řetězcový literál, který obsahuje zdobený název ohraničující funkce. Makro je definováno pouze v rámci funkce. Makro __FUNCDNAME__ není rozbalené, pokud použijete možnost nebo /P možnost kompilátoru/EP.

    V tomto příkladu __FUNCDNAME__se k zobrazení informací o funkcích používají makra a __FUNCSIG____FUNCTION__ .

    // 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__ Definuje se jako řetězcový literál, který obsahuje podpis ohraničující funkce. Makro je definováno pouze v rámci funkce. Makro __FUNCSIG__ není rozbalené, pokud použijete možnost nebo /P možnost kompilátoru/EP. Při kompilaci pro 64bitový cíl je __cdecl ve výchozím nastavení konvence volání. Příklad použití najdete v makrech __FUNCDNAME__ .

  • __FUNCTION__ Definováno jako řetězcový literál, který obsahuje nezakódovaný název ohraničující funkce. Makro je definováno pouze v rámci funkce. Makro __FUNCTION__ není rozbalené, pokud použijete možnost nebo /P možnost kompilátoru/EP. Příklad použití najdete v makrech __FUNCDNAME__ .

  • _INTEGRAL_MAX_BITS Definuje se jako celočíselná hodnota literálu 64, maximální velikost (v bitech) celočíselného typu. Toto makro je vždy definováno.

    // integral_max_bits.cpp
    #include <stdio.h>
    int main() {
        printf("%d\n", _INTEGRAL_MAX_BITS);
    }
    
  • __INTELLISENSE__ Definice jako 1 během kompilátoru IntelliSense předá integrované vývojové prostředí sady Visual Studio. Jinak není definováno. Pomocí tohoto makra můžete chránit kód, kterému kompilátor IntelliSense nerozumí, nebo ho můžete použít k přepínání mezi kompilátorem sestavení a IntelliSense. Další informace najdete v tématu Tipy pro řešení potíží s pomalostí technologie IntelliSense.

  • _ISO_VOLATILE Je definován jako 1, pokud je nastavena možnost kompilátoru /volatile:iso . Jinak není definováno.

  • _KERNEL_MODEDefinuje se jako 1, pokud je nastavena možnost kompilátoru /kernel (Create Kernel Mode Binary). Jinak není definováno.

  • _M_AMD64 Definováno jako celočíselná hodnota literálu 100 pro kompilace, které cílí na procesory x64 nebo ARM64EC. Jinak není definováno.

  • _M_ARM Definuje se jako celočíselná hodnota literálu 7 pro kompilace, které cílí na procesory ARM. Nedefinováno pro ARM64, ARM64EC a další cíle.

  • _M_ARM_ARMV7VE Definováno jako 1, pokud je možnost kompilátoru /arch:ARMv7VE nastavena pro kompilace, které cílí na procesory ARM. Jinak není definováno.

  • _M_ARM_FP Definováno jako celočíselná hodnota literálu označující, která /arch možnost kompilátoru byla nastavena pro cíle procesoru ARM. Jinak není definováno.

    • Hodnota v rozsahu 30–39, pokud nebyla zadána žádná /arch možnost ARM, která indikuje, že byla nastavena výchozí architektura ARM (VFPv3).

    • Hodnota v rozsahu 40–49, pokud /arch:VFPv4 byla nastavena.

    • Další informace najdete v tématu /arch (ARM).

  • _M_ARM64 Definováno jako 1 pro kompilace, které cílí na ARM64. Jinak není definováno.

  • _M_ARM64EC Definováno jako 1 pro kompilace, které cílí na ARM64EC. Jinak není definováno.

  • _M_CEEDefinováno jako 001, pokud je nastavena nějaká /clr možnost kompilátoru (Common Language Runtime Compilation). Jinak není definováno.

  • _M_CEE_PURE Zastaralé od sady Visual Studio 2015. Definováno jako 001, pokud je nastavena možnost kompilátoru /clr:pure . Jinak není definováno.

  • _M_CEE_SAFE Zastaralé od sady Visual Studio 2015. Definováno jako 001, pokud je nastavena možnost kompilátoru /clr:safe . Jinak není definováno.

  • _M_FP_CONTRACT K dispozici od sady Visual Studio 2022. Definuje se jako 1, pokud je nastavena možnost kompilátoru /fp:contract /fp:fast . Jinak není definováno.

  • _M_FP_EXCEPT Definuje se jako 1, pokud je nastavena možnost kompilátoru /fp:except /fp:strict . Jinak není definováno.

  • _M_FP_FAST Je definován jako 1, pokud je nastavena možnost kompilátoru /fp:fast . Jinak není definováno.

  • _M_FP_PRECISE Je definován jako 1, pokud je nastavena možnost kompilátoru /fp:precise . Jinak není definováno.

  • _M_FP_STRICT Je definován jako 1, pokud je nastavena možnost kompilátoru /fp:strict . Jinak není definováno.

  • _M_IX86 Definováno jako celočíselná hodnota literálu 600 pro kompilace, které cílí na procesory x86. Toto makro není definováno pro cíle kompilace x64 nebo ARM.

  • _M_IX86_FP Definováno jako celočíselná hodnota literálu označující nastavenou /arch možnost kompilátoru nebo výchozí hodnotu. Toto makro je vždy definováno, pokud je cílem kompilace procesor x86. Jinak není definováno. Při definování je tato hodnota:

    • 0, pokud byla nastavena možnost kompilátoru /arch:IA32 .

    • 1, pokud byla nastavena možnost kompilátoru /arch:SSE .

    • 2, pokud byla nastavena /arch:SSE2možnost , /arch:AVX, /arch:AVX2/arch:AVX512 nebo /arch:AVX10.1 kompilátor. Tato hodnota je výchozí, pokud nebyla zadána možnost kompilátoru /arch . Po /arch:AVX zadání je také definováno makro __AVX__ . Při /arch:AVX2 zadání jsou definovány obě __AVX__ a __AVX2__ jsou také definovány. Je-li /arch:AVX512 zadán, , , __AVX512BW____AVX512CD____AVX2____AVX512DQ____AVX____AVX512F__, a __AVX512VL__ jsou také definovány. Je-li /arch:AVX10.1 zadán, , , __AVX512BW____AVX512DQ____AVX____AVX512CD____AVX512F____AVX2__, __AVX512VL__ a __AVX10_VER__ jsou také definovány.

    • Další informace najdete v tématu /arch (x86).>

  • _M_X64 Definováno jako celočíselná hodnota literálu 100 pro kompilace, které cílí na procesory x64 nebo ARM64EC. Jinak není definováno.

  • _MANAGED Definováno jako 1, když je nastavena možnost kompilátoru /clr . Jinak není definováno.

  • _MSC_BUILD Definováno jako celočíselná literála, která obsahuje prvek číslo revize čísla verze kompilátoru. Číslo revize je posledním prvkem čísla verze s oddělovači tečkami. Pokud je například číslo verze kompilátoru Microsoft C/C++ 15.00.20706.01, _MSC_BUILD makro je 1. Toto makro je vždy definováno.

  • _MSC_EXTENSIONSJe definován jako 1, pokud je nastavena možnost kompilátoru on-in-by-default /Ze (Enable Language Extensions). Jinak není definováno.

  • _MSC_FULL_VER Definuje se jako celočíselná literála, která kóduje hlavní, podverze a číselné prvky čísla sestavení čísla verze kompilátoru. Hlavní číslo je prvním prvkem čísla verze odděleného tečkou, podverze je druhý prvek a číslo buildu je třetí prvek.

    Pokud je například verze kompilátoru Microsoft C/C++ 19.39.33519, _MSC_FULL_VER je 193933519. Zadáním cl /? na příkazovém řádku zobrazíte číslo verze kompilátoru. Toto makro je vždy definováno. Další informace o správě verzí kompilátoru najdete v článku o správě verzí kompilátoru C++ a konkrétně verzích služby počínaje sadou Visual Studio 2017 , kde najdete další informace o sadě Visual Studio 2019 16.8, 16.9, 16.10 a 16.11, které vyžadují _MSC_FULL_VER jejich oddělování.

  • _MSC_VER Definováno jako celočíselné literál, který kóduje hlavní a vedlejší číselné elementy čísla verze kompilátoru. Hlavní číslo je prvním prvkem čísla verze odděleného tečkou a podverze je druhý prvek. Pokud je například číslo verze kompilátoru Microsoft C/C++ 17.00.51106.1, hodnota _MSC_VER je 1700. Zadáním cl /? na příkazovém řádku zobrazíte číslo verze kompilátoru. Toto makro je vždy definováno.

    K otestování verzí nebo aktualizací kompilátoru v dané verzi sady Visual Studio nebo novější použijte >= operátor. Můžete ji použít v podmíněné direktivě k porovnání _MSC_VER s danou známou verzí. Pokud máte k porovnání několik vzájemně se vylučujících verzí, sestavte porovnání v sestupném pořadí čísla verze. Tento kód například kontroluje kompilátory vydané v sadě Visual Studio 2017 a novějších. Dále zkontroluje kompilátory vydané v sadě Visual Studio 2015 nebo po něm. Pak zkontroluje všechny kompilátory vydané před sadou Visual Studio 2015:

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

    Další informace o sadě Visual Studio 2019 16.8 a 16.9 a 16.10 a 16.11, které sdílejí stejné hlavní a podverze (a proto mají stejnou hodnotu pro _MSC_VER), najdete v tématech Vydání služeb počínaje sadou Visual Studio 2017.

    Další informace o historii správy verzí kompilátoru a čísla verzí kompilátoru a verzí sady Visual Studio, které odpovídají, naleznete v tématu Správa verzí kompilátoru jazyka C++. Také verze kompilátoru Visual C++ na blogu týmu Microsoft C++.

  • _MSVC_LANG Definováno jako celočíselné literál, který určuje jazykový standard jazyka C++, na který cílí kompilátor. Pouze kód zkompilovaný jako C++ ho nastaví. Makro je ve výchozím nastavení celočíselná hodnota 201402L literálu nebo pokud je zadána možnost kompilátoru /std:c++14 . Makro je nastaveno, 201703L pokud je zadána možnost kompilátoru /std:c++17 . Makro je nastaveno, 202002L pokud je zadána možnost kompilátoru /std:c++20 . Pokud je tato možnost zadána, je nastavená na vyšší, nezadanou hodnotu /std:c++latest . Jinak makro není definováno. Možnosti kompilátoru _MSVC_LANG makra a /std (Určení standardní verze jazyka) jsou k dispozici od sady Visual Studio 2015 Update 3.

  • __MSVC_RUNTIME_CHECKS Definováno jako 1, pokud je nastavena jedna z možností kompilátoru /RTC . Jinak není definováno.

  • _MSVC_TRADITIONAL:

    • Dostupné od sady Visual Studio 2017 verze 15.8: Je definováno jako 0, pokud je nastavena možnost kompilátoru režimu /experimental:preprocessor shody preprocesoru. Ve výchozím nastavení je definováno jako 1 nebo pokud /experimental:preprocessor- je nastavena možnost kompilátoru, která označuje, že se používá tradiční preprocesor.
    • K dispozici od sady Visual Studio 2019 verze 16.5: Je definováno jako 0, když je nastavena možnost kompilátoru režimu /Zc:preprocessor shody preprocesoru. Ve výchozím nastavení je definováno jako 1 nebo pokud /Zc:preprocessor- je nastavena možnost kompilátoru, která označuje, /Zc:preprocessor že se používá tradiční preprocesor (v podstatě nahrazuje zastaralé /experimental:preprocessor).
    #if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
    // Logic using the traditional preprocessor
    #else
    // Logic using cross-platform compatible preprocessor
    #endif
    
  • _MT Definováno jako 1 při /MD nebo /MDd (Multithreaded DLL) nebo /MT /MTd (Multithreaded) je zadáno. Jinak není definováno.

  • _NATIVE_WCHAR_T_DEFINED Definováno jako 1, když je nastavena možnost kompilátoru /Zc:wchar_t . Jinak není definováno.

  • _OPENMPJe-li nastavena možnost kompilátoru (Povolit podporu OpenMP 2.0) jako celočíselná literálová 200203, je-li nastavena možnost kompilátoru /openmp (Povolit podporu OpenMP 2.0). Tato hodnota představuje datum specifikace OpenMP implementované msVC. Jinak není definováno.

    // _OPENMP_dir.cpp
    // compile with: /openmp
    #include <stdio.h>
    int main() {
        printf("%d\n", _OPENMP);
    }
    
  • _PREFAST_ Definováno jako 1, když je nastavena možnost kompilátoru /analyze . Jinak není definováno.

  • __SANITIZE_ADDRESS__ K dispozici od sady Visual Studio 2019 verze 16.9. Definováno jako 1, když je nastavena možnost kompilátoru /fsanitize=address . Jinak není definováno.

  • __TIMESTAMP__ Definováno jako řetězcový literál obsahující datum a čas poslední změny aktuálního zdrojového souboru ve zkrácené formě konstantní délky vrácené funkcí CRT asctime , Fri 19 Aug 13:32:58 2016například . Toto makro je vždy definováno.

  • _VC_NODEFAULTLIB Je definován jako 1, pokud je nastavena možnost kompilátoru /Zl (vynechat výchozí název knihovny). Jinak není definováno.

  • _WCHAR_T_DEFINED Pokud je nastavena výchozí /Zc:wchar_t možnost kompilátoru, je definována jako 1. Makro _WCHAR_T_DEFINED je definováno, ale nemá žádnou hodnotu, pokud /Zc:wchar_t- je nastavena možnost kompilátoru a wchar_t je definována v systémovém hlavičce souboru zahrnutého v projektu. Jinak není definováno.

  • _WIN32 Definovaný jako 1, pokud je cíl kompilace 32bitový ARM, 64bitový ARM, x86 nebo x64. Jinak není definováno.

  • _WIN64 Definovaný jako 1, pokud je cíl kompilace 64bitový ARM nebo x64. Jinak není definováno.

  • _WINRT_DLLPři kompilaci jazyka C++ a /ZW nastavení možností kompilátoru (prostředí Windows Runtime kompilace) a/LD kompilátoru /LDd jako 1. Jinak není definováno.

Kompilátor nedefinuje žádná makra preprocesoru, která identifikují verzi knihovny ATL nebo MFC. Hlavičky knihovny ATL a MFC definují tato makra verzí interně. Nejsou definovány v direktivách preprocesoru provedené před zahrnutím požadované hlavičky.

  • _ATL_VER Definováno <atldef.h> jako celočíselné literál, který kóduje číslo verze ATL.

  • _MFC_VER Definováno <afxver_.h> jako celočíselné literál, který kóduje číslo verze MFC.

Viz také

Makra (C/C++)
Operátory preprocesoru
Direktivy preprocesoru