Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kompilator Microsoft C/C++ (MSVC) wstępnie zdefiniowane niektóre makra preprocesora w zależności od języka (C lub C++), celu kompilacji i wybranych opcji kompilatora.
MSVC obsługuje wstępnie zdefiniowane makra preprocesora wymagane przez standardy ANSI/ISO C99, C11 i C17 oraz standardy ISO C++14, C++17 i C++20. Implementacja obsługuje również kilka makr preprocesora specyficznych dla firmy Microsoft.
Niektóre makra są definiowane tylko dla określonych środowisk kompilacji lub opcji kompilatora. Z wyjątkiem przypadków, w których zanotowano, makra są definiowane w całej jednostce tłumaczenia tak, jakby zostały określone jako /D argumenty opcji kompilatora. Po zdefiniowaniu preprocesor rozszerza makra określone wartości przed kompilacją. Wstępnie zdefiniowane makra nie przyjmują żadnych argumentów i nie można ich ponownie zdefiniować.
Identyfikator wstępnie zdefiniowany w warstwie Standardowa
Kompilator obsługuje ten wstępnie zdefiniowany identyfikator określony przez iso C99 i ISO C++11.
__func__Niekwalifikowana i niewielęgodna nazwa otaczającej funkcji jako statyczna tablica const funkcji lokalnej klasychar.void example() { printf("%s\n", __func__); } // prints "example"
Standardowe wstępnie zdefiniowane makra
Kompilator obsługuje te wstępnie zdefiniowane makra określone przez standardy ISO C99, C11, C17 i ISO C++17.
__cplusplusZdefiniowano jako wartość literału liczby całkowitej, gdy jednostka tłumaczenia jest kompilowana jako C++. W przeciwnym razie niezdefiniowane.__DATE__Data kompilacji bieżącego pliku źródłowego. Data to literał ciągu o stałej długości formularza Mmm dd rrrr. Nazwa miesiąca Mmm jest taka sama jak skrócona nazwa miesiąca wygenerowana przez funkcję asctime biblioteki środowiska uruchomieniowego języka C (CRT). Pierwszy znak daty dd to spacja, jeśli wartość jest mniejsza niż 10. To makro jest zawsze zdefiniowane.__FILE__Nazwa bieżącego pliku źródłowego.__FILE__rozwija się do literału ciągu znaków. Aby upewnić się, że zostanie wyświetlona pełna ścieżka do pliku, użyj opcji/FC(Pełna ścieżka pliku kodu źródłowego w diagnostyce). To makro jest zawsze zdefiniowane.__LINE__Zdefiniowano jako numer wiersza liczby całkowitej w bieżącym pliku źródłowym. Wartość tego makra można zmienić przy użyciu#linedyrektywy . Całkowity typ wartości__LINE__może się różnić w zależności od kontekstu. To makro jest zawsze zdefiniowane.__STDC__Zdefiniowano jako 1 podczas kompilowania jako C i jeśli określono opcję kompilatora/Za. Począwszy od programu Visual Studio 2022 w wersji 17.2, jest on zdefiniowany jako 1 podczas kompilacji jako C i jeśli określono opcję kompilatora/Zc:__STDC__. W przeciwnym razie niezdefiniowane.__STDC_HOSTED__Zdefiniowana jako 1, jeśli implementacja jest implementacją hostowaną, która obsługuje całą wymaganą bibliotekę standardową. W przeciwnym razie zdefiniowano wartość 0.__STDC_NO_ATOMICS__Zdefiniowana jako 1, jeśli implementacja nie obsługuje opcjonalnych niepodzielnych standardowych elementów niepodzielnych. Implementacja MSVC definiuje ją jako 1 podczas kompilowania jako C i określono jedną z/stdopcji C11 lub C17.__STDC_NO_COMPLEX__Zdefiniowana jako 1, jeśli implementacja nie obsługuje opcjonalnych standardowych liczb zespolonych. Implementacja MSVC definiuje ją jako 1 podczas kompilowania jako C i określono jedną z/stdopcji C11 lub C17.__STDC_NO_THREADS__Zdefiniowana jako 1, jeśli implementacja nie obsługuje opcjonalnych standardowych wątków. Implementacja MSVC definiuje ją jako 1 podczas kompilowania jako C i określono jedną z/stdopcji C11 lub C17.__STDC_NO_VLA__Zdefiniowana jako 1, jeśli implementacja nie obsługuje standardowych tablic o zmiennej długości. Implementacja MSVC definiuje ją jako 1 podczas kompilowania jako C i określono jedną z/stdopcji C11 lub C17.__STDC_VERSION__Zdefiniowane podczas kompilowania jako C i jednej z/stdopcji C11 lub C17 jest określony. Jest on rozszerzany do201112Ldla/std:c11, i201710Ldla/std:c17.__STDCPP_DEFAULT_NEW_ALIGNMENT__Gdy/std:c17zostanie określone lub nowsze, to makro rozszerza się nasize_tliterał, który ma wartość wyrównania gwarantowane przez wywołanie do wyrównania nieświadomeoperator new. Większe wyrównania są przekazywane do przeciążenia obsługującego wyrównanie, takiego jakoperator new(std::size_t, std::align_val_t). Aby uzyskać więcej informacji, zobacz/Zc:alignedNew(Alokacja wyrównana nadmiernie w języku C++17).__STDCPP_THREADS__Zdefiniowano jako 1, jeśli i tylko wtedy, gdy program może mieć więcej niż jeden wątek wykonywania i skompilowany jako C++. W przeciwnym razie niezdefiniowane.__TIME__Czas tłumaczenia wstępnie przetworzonej jednostki tłumaczenia. Czas to literał ciągu znaków formularza hh:mm:ss, taki sam jak czas zwracany przez funkcję asctime CRT. To makro jest zawsze zdefiniowane.
Wstępnie zdefiniowane makra specyficzne dla firmy Microsoft
Program MSVC obsługuje inne wstępnie zdefiniowane makra:
__ARM_ARCHZdefiniowano jako literał liczb całkowitych reprezentujący wersję architektury usługi ARM. Wartość jest zdefiniowana jako 8 dla architektury Armv8-A. W przypadku wersji 8.1 i nowszych wartość jest skalowana dla wersji pomocniczych, takich jak X.Y, przy użyciu formuły X * 100 + Y zgodnie z definicją rozszerzenia języka ARM C. Na przykład w przypadku armv8.1__ARM_ARCHwartość to 8 * 100 + 1 lub 801. Aby ustawić wersję architektury usługi ARM, zobacz/arch (ARM64). To makro zostało wprowadzone w programie Visual Studio 2022 w wersji 17.10.__ATOM__Zdefiniowana jako 1, gdy jest ustawiona/favor:ATOMopcja kompilatora, a element docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX__Zdefiniowane jako 1, gdy są ustawione opcje kompilatora/arch:AVX,/arch:AVX2/arch:AVX512,/arch:AVX10.1, lub/arch:AVX10.2, a obiekt docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX2__Zdefiniowane jako 1, gdy jest ustawiona/arch:AVX2opcja ,/arch:AVX512,/arch:AVX10.1lub/arch:AVX10.2kompilatora, a obiekt docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX512BW__Zdefiniowano jako 1, gdy jest ustawiona/arch:AVX512opcja ,/arch:AVX10.1lub/arch:AVX10.2kompilatora, a element docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX512CD__Zdefiniowano jako 1, gdy jest ustawiona/arch:AVX512opcja ,/arch:AVX10.1lub/arch:AVX10.2kompilatora, a element docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX512DQ__Zdefiniowano jako 1, gdy jest ustawiona/arch:AVX512opcja ,/arch:AVX10.1lub/arch:AVX10.2kompilatora, a element docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX512F__Zdefiniowano jako 1, gdy jest ustawiona/arch:AVX512opcja ,/arch:AVX10.1lub/arch:AVX10.2kompilatora, a element docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX512VL__Zdefiniowano jako 1, gdy jest ustawiona/arch:AVX512opcja ,/arch:AVX10.1lub/arch:AVX10.2kompilatora, a element docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane.__AVX10_VER__Zdefiniowane jako liczba całkowita reprezentująca wersję avX10, gdy/arch:AVX10.1jest ustawiona opcja lub/arch:AVX10.2kompilatora, a obiekt docelowy kompilatora to x86 lub x64. W przeciwnym razie niezdefiniowane._CHAR_UNSIGNEDZdefiniowano jako 1, jeśli typ domyślnycharjest niepodpisany. Ta wartość jest definiowana, gdy jest ustawiona opcja kompilatora/J(domyślny typ znaku jest niepodpisany). W przeciwnym razie niezdefiniowane.__CLR_VERZdefiniowano jako literał całkowity reprezentujący wersję środowiska uruchomieniowego języka wspólnego (CLR) używanego do kompilowania aplikacji. Wartość jest kodowana w postaciMmmbbbbb, gdzieMjest główną wersją środowiska uruchomieniowego,mmjest pomocniczą wersją środowiska uruchomieniowego ibbbbbjest numerem kompilacji.__CLR_VERjest definiowany, jeśli opcja kompilatora/clrjest ustawiona. W przeciwnym razie niezdefiniowane.// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); }_CONTROL_FLOW_GUARDZdefiniowana jako 1, gdy jest ustawiona opcja kompilatora/guard:cf(Włącz funkcję Control Flow Guard). W przeciwnym razie niezdefiniowane.__COUNTER__Rozwija się do literału liczby całkowitej, który zaczyna się od 0. Wartość zwiększa się o 1 za każdym razem, gdy jest używana w pliku źródłowym lub w dołączonych nagłówkach pliku źródłowego.__COUNTER__zapamiętuje jego stan podczas używania wstępnie skompilowanych nagłówków. To makro jest zawsze zdefiniowane.W tym przykładzie użyto
__COUNTER__metody przypisywania unikatowych identyfikatorów do trzech różnych obiektów tego samego typu. KonstruktorexampleClassprzyjmuje liczbę całkowitą jako parametr. Wmainsystemie aplikacja deklaruje trzy obiekty typuexampleClass, używając__COUNTER__jako unikatowego parametru identyfikatora:// 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_cliZdefiniowana jako wartość literału liczby całkowitej 200406 podczas kompilowania jako C++ i ustawiono opcję kompilatora/clr. W przeciwnym razie niezdefiniowane. Gdy jest zdefiniowana,__cplusplus_clidziała w całej jednostce tłumaczenia.// 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_winrtZdefiniowana jako wartość literału liczby całkowitej 201009 po skompilowaniu jako C++ i/ZWustawiono opcję kompilatora (kompilacja środowisko wykonawcze systemu Windows). W przeciwnym razie niezdefiniowane._CPPRTTIZdefiniowano jako 1, jeśli jest ustawiona/GRopcja kompilatora (Włącz informacje o typie czasu wykonywania). W przeciwnym razie niezdefiniowane._CPPUNWINDZdefiniowano jako 1, jeśli ustawiono co najmniej jedną/GXz opcji kompilatora (Włącz obsługę wyjątków),/clr(kompilacja środowiska uruchomieniowego języka wspólnego) lub/EH(model obsługi wyjątków). W przeciwnym razie niezdefiniowane._DEBUGZdefiniowano jako 1, gdy jest ustawiona/LDdopcja ,/MDdlub/MTdkompilatora. W przeciwnym razie niezdefiniowane._DLLZdefiniowane jako 1, gdy jest ustawiona opcja kompilatora/MDlub/MDd(wielowątkowa biblioteka DLL). W przeciwnym razie niezdefiniowane.__FUNCDNAME__Zdefiniowano jako literał ciągu, który zawiera ozdobioną nazwę otaczającej funkcji. Makro jest definiowane tylko w ramach funkcji. Makro__FUNCDNAME__nie jest rozwinięte, jeśli używasz/EPopcji lub/Pkompilatora.W tym przykładzie użyto
__FUNCDNAME__makr ,__FUNCSIG__i__FUNCTION__do wyświetlania informacji o funkcji.// 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__Zdefiniowano jako literał ciągu, który zawiera podpis otaczającej funkcji. Makro jest definiowane tylko w ramach funkcji. Makro__FUNCSIG__nie jest rozwinięte, jeśli używasz/EPopcji lub/Pkompilatora. Podczas kompilowania dla obiektu docelowego 64-bitowego konwencja wywoływania jest__cdecldomyślnie. Przykład użycia można znaleźć w makrze__FUNCDNAME__.__FUNCTION__Zdefiniowano jako literał ciągu, który zawiera nieukodowaną nazwę otaczającej funkcji. Makro jest definiowane tylko w ramach funkcji. Makro__FUNCTION__nie jest rozwinięte, jeśli używasz/EPopcji lub/Pkompilatora. Przykład użycia można znaleźć w makrze__FUNCDNAME__._INTEGRAL_MAX_BITSZdefiniowano jako wartość literału liczby całkowitej 64, maksymalny rozmiar (w bitach) dla typu całkowitego niewektora. To makro jest zawsze zdefiniowane.// integral_max_bits.cpp #include <stdio.h> int main() { printf("%d\n", _INTEGRAL_MAX_BITS); }__INTELLISENSE__Zdefiniowano jako 1 podczas przekazywania kompilatora intelliSense w środowisku IDE programu Visual Studio. W przeciwnym razie niezdefiniowane. Tego makra można użyć do ochrony kodu, którego kompilator IntelliSense nie rozumie, lub użyć go do przełączania się między kompilatorem i kompilatorem funkcji IntelliSense. Aby uzyskać więcej informacji, zobacz Porady dotyczące rozwiązywania problemów z powolnym działaniem funkcji IntelliSense._ISO_VOLATILEZdefiniowano jako 1, jeśli jest ustawiona opcja kompilatora/volatile:iso. W przeciwnym razie niezdefiniowane._KERNEL_MODEZdefiniowane jako 1, jeśli/kerneljest ustawiona opcja kompilatora (Utwórz plik binarny trybu jądra). W przeciwnym razie niezdefiniowane._M_AMD64Zdefiniowano jako wartość literału liczby całkowitej 100 dla kompilacji przeznaczonych dla procesorów x64 lub ARM64EC. W przeciwnym razie niezdefiniowane._M_ARMZdefiniowano jako wartość literału liczby całkowitej 7 dla kompilacji przeznaczonych dla procesorów ARM. Niezdefiniowane dla arm64, ARM64EC i innych obiektów docelowych._M_ARM_ARMV7VEZdefiniowana jako 1, gdy opcja kompilatora/arch:ARMv7VEjest ustawiona dla kompilacji przeznaczonych dla procesorów ARM. W przeciwnym razie niezdefiniowane._M_ARM_FPZdefiniowano jako wartość literału liczby całkowitej, która wskazuje, która/archopcja kompilatora została ustawiona dla celów procesora ARM. W przeciwnym razie niezdefiniowane.Wartość w zakresie od 30 do 39, jeśli nie
/archokreślono opcji ARM, wskazująca domyślną architekturę dla usługi ARM została ustawiona (VFPv3).Wartość w zakresie 40–49, jeśli
/arch:VFPv4została ustawiona.Aby uzyskać więcej informacji, zobacz
/arch(ARM).
_M_ARM64Zdefiniowano jako 1 dla kompilacji przeznaczonych dla usługi ARM64. W przeciwnym razie niezdefiniowane._M_ARM64ECZdefiniowano jako 1 dla kompilacji docelowych ARM64EC. W przeciwnym razie niezdefiniowane._M_CEEZdefiniowana jako 001, jeśli jest ustawiona jakakolwiek/clropcja kompilatora (kompilacja środowiska uruchomieniowego języka wspólnego). W przeciwnym razie niezdefiniowane._M_CEE_PUREPrzestarzałe począwszy od programu Visual Studio 2015. Zdefiniowana jako 001, jeśli jest ustawiona opcja kompilatora/clr:pure. W przeciwnym razie niezdefiniowane._M_CEE_SAFEPrzestarzałe począwszy od programu Visual Studio 2015. Zdefiniowana jako 001, jeśli jest ustawiona opcja kompilatora/clr:safe. W przeciwnym razie niezdefiniowane._M_FP_CONTRACTDostępne począwszy od programu Visual Studio 2022. Zdefiniowano jako 1, jeśli/fp:contractustawiono opcję kompilatora lub/fp:fast. W przeciwnym razie niezdefiniowane._M_FP_EXCEPTZdefiniowano jako 1, jeśli/fp:exceptustawiono opcję kompilatora lub/fp:strict. W przeciwnym razie niezdefiniowane._M_FP_FASTZdefiniowano jako 1, jeśli jest ustawiona opcja kompilatora/fp:fast. W przeciwnym razie niezdefiniowane._M_FP_PRECISEZdefiniowano jako 1, jeśli jest ustawiona opcja kompilatora/fp:precise. W przeciwnym razie niezdefiniowane._M_FP_STRICTZdefiniowano jako 1, jeśli jest ustawiona opcja kompilatora/fp:strict. W przeciwnym razie niezdefiniowane._M_IX86Zdefiniowano jako wartość literału liczby całkowitej 600 dla kompilacji przeznaczonych dla procesorów x86. To makro nie jest zdefiniowane dla elementów docelowych kompilacji x64 ani ARM._M_IX86_FPZdefiniowano jako wartość literału liczby całkowitej, która wskazuje/archopcję kompilatora, która została ustawiona lub wartość domyślna. To makro jest zawsze definiowane, gdy element docelowy kompilacji jest procesorem x86. W przeciwnym razie niezdefiniowane. Po zdefiniowaniu wartość to:0, jeśli została ustawiona opcja kompilatora
/arch:IA32.1, jeśli została ustawiona opcja kompilatora
/arch:SSE.2, jeśli
/arch:SSE2ustawiono opcję ,/arch:AVX,/arch:AVX2/arch:AVX512, ,/arch:AVX10.1lub/arch:AVX10.2kompilatora. Ta wartość jest wartością domyślną, jeśli/archnie określono opcji kompilatora. Po/arch:AVXokreśleniu makra__AVX__jest również definiowane. Gdy/arch:AVX2jest określony, zarówno, jak__AVX__i__AVX2__są również zdefiniowane. Gdy/arch:AVX512parametr jest określony, ,__AVX____AVX2____AVX512BW____AVX512CD____AVX512DQ____AVX512F__i__AVX512VL__są również zdefiniowane. Jeśli/arch:AVX10.1określono wartość lub/arch:AVX10.2,__AVX__,__AVX2____AVX512DQ____AVX512CD____AVX512F____AVX512BW__,__AVX512VL__i__AVX10_VER__są również zdefiniowane.Aby uzyskać więcej informacji, zobacz
/arch(x86).
_M_X64Zdefiniowano jako wartość literału liczby całkowitej 100 dla kompilacji przeznaczonych dla procesorów x64 lub ARM64EC. W przeciwnym razie niezdefiniowane._MANAGEDZdefiniowano jako 1, gdy jest ustawiona opcja kompilatora/clr. W przeciwnym razie niezdefiniowane._MSC_BUILDZdefiniowano jako literał liczb całkowitych, który zawiera element numeru poprawki numeru wersji kompilatora. Numer poprawki to ostatni element rozdzielanego okresem numeru wersji. Jeśli na przykład numer wersji kompilatora Microsoft C/C++ to 15.00.20706.01,_MSC_BUILDmakro to 1. To makro jest zawsze zdefiniowane._MSC_EXTENSIONSZdefiniowane jako 1, jeśli jest ustawiona opcja kompilatora on-by-default/Ze(Włącz rozszerzenia języka). W przeciwnym razie niezdefiniowane._MSC_FULL_VERZdefiniowane jako literał liczb całkowitych, który koduje główne, pomocnicze i numer kompilacji elementów numeru wersji kompilatora. Numer główny jest pierwszym elementem rozdzielanego kropkami numeru wersji, numer pomocniczy jest drugim elementem, a numer kompilacji jest trzecim elementem.Jeśli na przykład kompilator Microsoft C/C++ ma wersję 19.39.33519,
_MSC_FULL_VERjest 193933519. Wprowadźcl /?w wierszu polecenia, aby wyświetlić numer wersji kompilatora. To makro jest zawsze zdefiniowane. Aby uzyskać więcej informacji na temat przechowywania wersji kompilatora, zobacz Wersje kompilatora języka C++ i wersje usługi począwszy od programu Visual Studio 2017, aby uzyskać więcej informacji na temat programu Visual Studio 2019 16.8, 16.9, 16.10 i 16.11, które wymagają_MSC_FULL_VERod nich odróżnić._MSC_VERZdefiniowano jako literał liczb całkowitych, który koduje główne i pomocnicze elementy numeru wersji kompilatora. Numer główny jest pierwszym elementem rozdzielanego kropkami numeru wersji, a numer pomocniczy jest drugim elementem. Jeśli na przykład numer wersji kompilatora Microsoft C/C++ to 17.00.51106.1, wartość to_MSC_VER1700. Wprowadźcl /?w wierszu polecenia, aby wyświetlić numer wersji kompilatora. To makro jest zawsze zdefiniowane.Aby przetestować wersje kompilatora lub aktualizacje w danej wersji programu Visual Studio lub nowszej, użyj
>=operatora . Można go użyć w dyrektywie warunkowej, aby porównać_MSC_VERją ze znaną wersją. Jeśli masz kilka wzajemnie wykluczających się wersji do porównania, porządkuj porównania w kolejności malejącej numeru wersji. Na przykład ten kod sprawdza kompilatory wydane w programie Visual Studio 2017 lub nowszym. Następnie sprawdza, czy kompilatory zostały wydane w programie Visual Studio 2015 lub nowszym. Następnie sprawdza wszystkie kompilatory wydane przed programem Visual Studio 2015:#if _MSC_VER >= 1910 // . . . #elif _MSC_VER >= 1900 // . . . #else // . . . #endifAby uzyskać więcej informacji o programach Visual Studio 2019 16.8 i 16.9 oraz 16.10 i 16.11, które współużytkowały te same wersje główne i pomocnicze (i mają taką samą wartość dla
_MSC_VERprogramu ), zobacz Wersje usługi, począwszy od programu Visual Studio 2017.Aby uzyskać więcej informacji na temat historii przechowywania wersji kompilatora i numerów wersji kompilatora oraz odpowiadających im wersji programu Visual Studio, zobacz Wersje kompilatora języka C++. Ponadto wersja kompilatora Visual C++ na blogu zespołu microsoft C++.
_MSVC_LANGZdefiniowano jako literał całkowity, który określa standard języka C++ przeznaczony dla kompilatora. Ustawiany jest tylko kod skompilowany w języku C++. Makro jest domyślnie wartością201402Lliterału liczby całkowitej lub po określeniu opcji kompilatora/std:c++14. Makro jest ustawione na201703Lwartość , jeśli określono opcję kompilatora/std:c++17. Makro jest ustawione na202002Lwartość , jeśli określono opcję kompilatora/std:c++20. Jest ona ustawiona na wyższą, nieokreśloną wartość po określeniu/std:c++latestopcji. W przeciwnym razie makro jest niezdefiniowane. Opcje kompilatora_MSVC_LANGmakr i/std(Określ wersję standardową języka) są dostępne począwszy od programu Visual Studio 2015 Update 3.__MSVC_RUNTIME_CHECKSZdefiniowano jako 1, gdy ustawiono jedną z opcji kompilatora/RTC. W przeciwnym razie niezdefiniowane._MSVC_TRADITIONAL:- Dostępne począwszy od programu Visual Studio 2017 w wersji 15.8: zdefiniowane jako 0 po ustawieniu opcji kompilatora trybu
/experimental:preprocessorzgodności preprocesora. Zdefiniowana jako 1 domyślnie lub gdy/experimental:preprocessor-jest ustawiona opcja kompilatora, aby wskazać, że jest używany tradycyjny preprocesor. - Dostępne począwszy od programu Visual Studio 2019 w wersji 16.5: zdefiniowane jako 0 po ustawieniu opcji kompilatora trybu
/Zc:preprocessorzgodności preprocesora. Zdefiniowane jako 1 domyślnie lub gdy/Zc:preprocessor-jest ustawiona opcja kompilatora, aby wskazać, że tradycyjny preprocesor jest używany (zasadniczo/Zc:preprocessorzastępuje przestarzałe/experimental:preprocessor).
#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL // Logic using the traditional preprocessor #else // Logic using cross-platform compatible preprocessor #endif- Dostępne począwszy od programu Visual Studio 2017 w wersji 15.8: zdefiniowane jako 0 po ustawieniu opcji kompilatora trybu
_MTZdefiniowano jako 1, gdy/MDokreślono lub/MDd(wielowątkową bibliotekę DLL) lub/MT/MTd(wielowątkową). W przeciwnym razie niezdefiniowane._NATIVE_WCHAR_T_DEFINEDZdefiniowano jako 1, gdy jest ustawiona opcja kompilatora/Zc:wchar_t. W przeciwnym razie niezdefiniowane._OPENMPZdefiniowana jako literał liczby całkowitej 200203, jeśli/openmpustawiono opcję kompilatora (Włącz obsługę protokołu OpenMP 2.0). Ta wartość reprezentuje datę specyfikacji OpenMP zaimplementowanej przez MSVC. W przeciwnym razie niezdefiniowane.// _OPENMP_dir.cpp // compile with: /openmp #include <stdio.h> int main() { printf("%d\n", _OPENMP); }_PREFAST_Zdefiniowano jako 1, gdy jest ustawiona opcja kompilatora/analyze. W przeciwnym razie niezdefiniowane.__SANITIZE_ADDRESS__Dostępne począwszy od programu Visual Studio 2019 w wersji 16.9. Zdefiniowano jako 1, gdy jest ustawiona opcja kompilatora/fsanitize=address. W przeciwnym razie niezdefiniowane.__TIMESTAMP__Zdefiniowane jako literał ciągu, który zawiera datę i godzinę ostatniej modyfikacji bieżącego pliku źródłowego, w skróconej postaci stałej długości zwracanej przez funkcję CRTasctime, na przykładFri 19 Aug 13:32:58 2016. To makro jest zawsze zdefiniowane._VC_NODEFAULTLIBZdefiniowana jako 1, gdy jest ustawiona opcja kompilatora/Zl(Pomiń domyślną nazwę biblioteki). W przeciwnym razie niezdefiniowane._WCHAR_T_DEFINEDZdefiniowana jako 1, gdy jest ustawiona domyślna/Zc:wchar_topcja kompilatora. Makro_WCHAR_T_DEFINEDjest zdefiniowane, ale nie ma wartości, jeśli/Zc:wchar_t-jest ustawiona opcja kompilatora iwchar_tjest definiowana w pliku nagłówka systemu zawartego w projekcie. W przeciwnym razie niezdefiniowane._WIN32Zdefiniowano jako 1, gdy element docelowy kompilacji to 32-bitowa wersja ARM, 64-bitowa usługa ARM, x86, x64 lub ARM64EC. W przeciwnym razie niezdefiniowane._WIN64Zdefiniowano jako 1, gdy element docelowy kompilacji to 64-bitowa wersja ARM, x64 lub ARM64EC. W przeciwnym razie niezdefiniowane._WINRT_DLLZdefiniowano jako 1 podczas kompilowania jako C++ oraz opcji/ZWi/LD/LDdkompilatora. W przeciwnym razie niezdefiniowane.
Żadne makra preprocesora identyfikujące wersję biblioteki ATL lub MFC nie są wstępnie zdefiniowane przez kompilator. Nagłówki bibliotek ATL i MFC definiują te makra wersji wewnętrznie. Nie są one zdefiniowane w dyrektywach preprocesora wykonanych przed dołączeniu wymaganego nagłówka.
_ATL_VERZdefiniowane jako<atldef.h>literał liczb całkowitych, który koduje numer wersji ATL._MFC_VERZdefiniowane jako<afxver_.h>literał liczb całkowitych, który koduje numer wersji MFC.