Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů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.
__cplusplusDefinová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/Zc:__STDC__. 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/stdmož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/stdmož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/stdmož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/stdmožností C11 nebo C17 je zadána.__STDC_VERSION__Je definována při kompilaci jako C a je zadána jedna z/stdmožností C11 nebo C17. Rozbalí201112Lse pro/std:c11, a201710Lpro/std:c17.__STDCPP_DEFAULT_NEW_ALIGNMENT__Pokud/std:c17je zadáno nebo později, toto makro se rozšíří nasize_tliterá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říkladoperator 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_ARCHDefinuje 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_ARCHje 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:ATOMje nastavena možnost kompilátoru a cíl kompilátoru je x86 nebo x64. Jinak není definováno.__AVX__Definováno jako 1, pokud jsou nastaveny/arch:AVXmožnosti , ,/arch:AVX10.1/arch:AVX2/arch:AVX512nebo/arch:AVX10.2kompilátoru a cíl kompilátoru je x86 nebo x64. Jinak není definováno.__AVX2__Definováno jako 1, pokud je nastavena/arch:AVX2možnost ,/arch:AVX512,/arch:AVX10.1nebo/arch:AVX10.2kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.__AVX512BW__Definováno jako 1, pokud je nastavena/arch:AVX512možnost ,/arch:AVX10.1nebo/arch:AVX10.2kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.__AVX512CD__Definováno jako 1, pokud je nastavena/arch:AVX512možnost ,/arch:AVX10.1nebo/arch:AVX10.2kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.__AVX512DQ__Definováno jako 1, pokud je nastavena/arch:AVX512možnost ,/arch:AVX10.1nebo/arch:AVX10.2kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.__AVX512F__Definováno jako 1, pokud je nastavena/arch:AVX512možnost ,/arch:AVX10.1nebo/arch:AVX10.2kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno.__AVX512VL__Definováno jako 1, pokud je nastavena/arch:AVX512možnost ,/arch:AVX10.1nebo/arch:AVX10.2kompilá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, pokud/arch:AVX10.1je nastavena možnost nebo/arch:AVX10.2kompilátor a cíl kompilátoru je x86 nebo x64. Jinak není definováno._CHAR_UNSIGNEDJe definován jako 1, pokud je výchozíchartyp 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_VERDefinová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ářiMmmbbbbb, kdeMje hlavní verzí modulu runtime,mmje podverze modulu runtime abbbbbje číslo buildu.__CLR_VERje 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_GUARDDefinuje 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. KonstruktorexampleClasspřebírá celé číslo jako parametr. Vmainaplikaci deklaruje tři objekty typuexampleClasspomocí__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_cliJe 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_cliplatí 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/EH(Model zpracování výjimek). Jinak není definováno._DEBUGDefinováno jako 1, pokud je nastavena/LDdmožnost ,/MDdnebo/MTdkompilátoru. Jinak není definováno._DLLDefinováno jako 1, pokud je nastavena možnost kompilátoru/MDnebo/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/EPmožnost kompilátoru/P.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/EPmožnost kompilátoru/P. Při kompilaci pro 64bitový cíl je__cdeclve 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/EPmožnost kompilátoru/P. Příklad použití najdete v makrech__FUNCDNAME__._INTEGRAL_MAX_BITSDefinováno jako celočíselná hodnota literálu 64, maximální velikost (v bitech) pro celočíselný typ. 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_VOLATILEJe 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_AMD64Definováno jako celočíselná hodnota literálu 100 pro kompilace, které cílí na procesory x64 nebo ARM64EC. Jinak není definováno._M_ARMDefinuje 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_ARMV7VEDefinováno jako 1, pokud je možnost kompilátoru/arch:ARMv7VEnastavena pro kompilace, které cílí na procesory ARM. Jinak není definováno._M_ARM_FPDefinováno jako celočíselná hodnota literálu označující, která/archmožnost kompilátoru byla nastavena pro cíle procesoru ARM. Jinak není definováno.Hodnota v rozsahu 30–39, pokud nebyla zadána žádná
/archmožnost ARM, která indikuje, že byla nastavena výchozí architektura ARM (VFPv3).Hodnota v rozsahu 40–49, pokud
/arch:VFPv4byla nastavena.Další informace najdete v tématu
/arch(ARM).
_M_ARM64Definováno jako 1 pro kompilace, které cílí na ARM64. Jinak není definováno._M_ARM64ECDefinováno jako 1 pro kompilace, které cílí na ARM64EC. Jinak není definováno._M_CEEDefinováno jako 001, pokud je nastavena nějaká/clrmožnost kompilátoru (Common Language Runtime Compilation). Jinak není definováno._M_CEE_PUREZastaralé od sady Visual Studio 2015. Definováno jako 001, pokud je nastavena možnost kompilátoru/clr:pure. Jinak není definováno._M_CEE_SAFEZastaralé od sady Visual Studio 2015. Definováno jako 001, pokud je nastavena možnost kompilátoru/clr:safe. Jinak není definováno._M_FP_CONTRACTK 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_EXCEPTDefinuje se jako 1, pokud je nastavena možnost kompilátoru/fp:except/fp:strict. Jinak není definováno._M_FP_FASTJe definován jako 1, pokud je nastavena možnost kompilátoru/fp:fast. Jinak není definováno._M_FP_PRECISEJe definován jako 1, pokud je nastavena možnost kompilátoru/fp:precise. Jinak není definováno._M_FP_STRICTJe definován jako 1, pokud je nastavena možnost kompilátoru/fp:strict. Jinak není definováno._M_IX86Definová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_FPDefinováno jako celočíselná hodnota literálu označující nastavenou/archmož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/arch:AVX10.1nebo/arch:AVX10.2kompilátor. Tato hodnota je výchozí, pokud nebyla zadána možnost kompilátoru/arch. Po/arch:AVXzadání je také definováno makro__AVX__. Při/arch:AVX2zadání jsou definovány obě__AVX__a__AVX2__jsou také definovány. Je-li/arch:AVX512zadán, , ,__AVX____AVX2____AVX512BW____AVX512CD____AVX512DQ____AVX512F__, a__AVX512VL__jsou také definovány. Je-li zadán nebo je zadán, ,__AVX512CD____AVX512DQ____AVX2____AVX____AVX512BW__,__AVX512VL____AVX512F__a__AVX10_VER__jsou také definovány./arch:AVX10.2/arch:AVX10.1Další informace najdete v tématu
/arch(x86).>
_M_X64Definováno jako celočíselná hodnota literálu 100 pro kompilace, které cílí na procesory x64 nebo ARM64EC. Jinak není definováno._MANAGEDDefinováno jako 1, když je nastavena možnost kompilátoru/clr. Jinak není definováno._MSC_BUILDDefinová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_BUILDmakro 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_VERDefinuje 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_VERje 193933519. Zadánímcl /?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_VERjejich oddělování._MSC_VERDefinová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_VERje 1700. Zadánímcl /?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_VERs 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 // . . . #endifDalší 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_LANGDefinová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á hodnota201402Lliterálu nebo pokud je zadána možnost kompilátoru/std:c++14. Makro je nastaveno,201703Lpokud je zadána možnost kompilátoru/std:c++17. Makro je nastaveno,202002Lpokud 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_LANGmakra a/std(Určení standardní verze jazyka) jsou k dispozici od sady Visual Studio 2015 Update 3.__MSVC_RUNTIME_CHECKSDefinová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:preprocessorshody 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:preprocessorshody 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- Dostupné od sady Visual Studio 2017 verze 15.8: Je definováno jako 0, pokud je nastavena možnost kompilátoru režimu
_MTDefinováno jako 1 při/MDnebo/MDd(Multithreaded DLL) nebo/MT/MTd(Multithreaded) je zadáno. Jinak není definováno._NATIVE_WCHAR_T_DEFINEDDefinová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)/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í CRTasctime,Fri 19 Aug 13:32:58 2016například . Toto makro je vždy definováno._VC_NODEFAULTLIBJe definován jako 1, pokud je nastavena možnost kompilátoru/Zl(vynechat výchozí název knihovny). Jinak není definováno._WCHAR_T_DEFINEDPokud je nastavena výchozí/Zc:wchar_tmožnost kompilátoru, je definována jako 1. Makro_WCHAR_T_DEFINEDje definováno, ale nemá žádnou hodnotu, pokud/Zc:wchar_t-je nastavena možnost kompilátoru awchar_tje definována v systémovém hlavičce souboru zahrnutého v projektu. Jinak není definováno._WIN32Definovaný jako 1, pokud je cíl kompilace 32bitový ARM, 64bitový ARM, x86, x64 nebo ARM64EC. Jinak není definováno._WIN64Definováno jako 1, pokud je cíl kompilace 64bitový ARM, x64 nebo ARM64EC. Jinak není definováno._WINRT_DLLPři kompilaci jazyka C++ a/ZWnastavení možností kompilátoru (prostředí Windows Runtime kompilace) a/LDkompilátoru/LDdjako 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_VERDefinováno<atldef.h>jako celočíselné literál, který kóduje číslo verze ATL._MFC_VERDefinováno<afxver_.h>jako celočíselné literál, který kóduje číslo verze MFC.