Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il compilatore Microsoft C/C++ (MSVC) consente di predefinito determinate macro del preprocessore a seconda del linguaggio (C o C++), della destinazione di compilazione e delle opzioni del compilatore scelte.
MSVC supporta le macro predefinite del preprocessore richieste dagli standard ANSI/ISO C99, C11 e C17 e ISO C++14, C++17 e C++20. L'implementazione supporta anche diverse macro del preprocessore specifiche di Microsoft.
Alcune macro sono definite solo per ambienti di compilazione specifici o opzioni del compilatore. Ad eccezione di quanto indicato, le macro vengono definite in un'unità di conversione come se fossero specificate come /D argomenti di opzione del compilatore. Se definito, il preprocessore espande le macro i relativi valori specificati prima della compilazione. Le macro predefinite non accettano argomenti e non possono essere ridefiniti.
Identificatore predefinito standard
Il compilatore supporta questo identificatore predefinito specificato da ISO C99 e ISO C++11.
__func__Nome non qualificato e non adorato della funzione di inclusione come matrice const statica locale della funzione dichar.void example() { printf("%s\n", __func__); } // prints "example"
Macro predefinite standard
Il compilatore supporta queste macro predefinite specificate dagli standard ISO C99, C11, C17 e ISO C++17.
__cplusplusDefinito come valore letterale integer quando l'unità di conversione viene compilata come C++. In caso contrario, non definito.__DATE__Data di compilazione del file di origine corrente. La data è un valore letterale stringa di lunghezza costante del formato Mmm gg aaaa. Il nome del mese Mmm corrisponde al nome del mese abbreviato generato dalla funzione asctime della libreria di runtime C (CRT). Il primo carattere di data dd è uno spazio se il valore è minore di 10. Questa macro è sempre definita.__FILE__Nome del file di origine corrente.__FILE__si espande fino a un valore letterale stringa di caratteri. Per assicurarsi che venga visualizzato il percorso completo del file, usare/FC(percorso completo del file di codice sorgente in Diagnostica). Questa macro è sempre definita.__LINE__Definito come numero di riga intero nel file di origine corrente. Il valore di questa macro può essere modificato utilizzando una#linedirettiva . Il tipo integrale del valore di__LINE__può variare a seconda del contesto. Questa macro è sempre definita.__STDC__Definito come 1 quando viene compilato come C e se viene specificata l'opzione del/Zacompilatore. A partire da Visual Studio 2022 versione 17.2, viene definito come 1 quando viene compilato come C e se viene specificata l'opzione del/Zc:__STDC__compilatore. In caso contrario, non definito.__STDC_HOSTED__Definito come 1 se l'implementazione è un'implementazione ospitata, una che supporta l'intera libreria standard richiesta. In caso contrario, definito come 0.__STDC_NO_ATOMICS__Definito come 1 se l'implementazione non supporta atomici standard facoltativi. L'implementazione MSVC lo definisce come 1 quando viene compilato come C e viene specificata una delle/stdopzioni C11 o C17.__STDC_NO_COMPLEX__Definito come 1 se l'implementazione non supporta numeri complessi standard facoltativi. L'implementazione MSVC lo definisce come 1 quando viene compilato come C e viene specificata una delle/stdopzioni C11 o C17.__STDC_NO_THREADS__Definito come 1 se l'implementazione non supporta thread standard facoltativi. L'implementazione MSVC lo definisce come 1 quando viene compilato come C e viene specificata una delle/stdopzioni C11 o C17.__STDC_NO_VLA__Definito come 1 se l'implementazione non supporta matrici di lunghezza variabile standard. L'implementazione MSVC lo definisce come 1 quando viene compilato come C e viene specificata una delle/stdopzioni C11 o C17.__STDC_VERSION__Definito quando viene compilato come C e viene specificata una delle/stdopzioni C11 o C17. Si espande in201112Lper/std:c11e201710Lper/std:c17.__STDCPP_DEFAULT_NEW_ALIGNMENT__Quando/std:c17si specifica o versione successiva, questa macro si espande in unsize_tvalore letterale con il valore dell'allineamento garantito da una chiamata a alignment-unwareoperator new. Gli allineamenti più grandi vengono passati a un overload compatibile con l'allineamento, ad esempiooperator new(std::size_t, std::align_val_t). Per altre informazioni, vedere (allocazione sovraallineare C++17).For more information, see/Zc:alignedNew(C++17 over-aligned allocation).__STDCPP_THREADS__Definito come 1 se e solo se un programma può avere più di un thread di esecuzione e compilato come C++. In caso contrario, non definito.__TIME__Ora di traduzione dell'unità di traduzione pre-elaborata. L'ora è un valore letterale stringa di caratteri del formato hh:mm:ss, uguale all'ora restituita dalla funzione asctime CRT. Questa macro è sempre definita.
Macro predefinite specifiche di Microsoft
MSVC supporta altre macro predefinite:
__ARM_ARCHDefinito come valore letterale integer che rappresenta la versione dell'architettura arm. Il valore è definito come 8 per l'architettura Armv8-A. Per 8.1 e versioni successive, il valore viene ridimensionato per le versioni secondarie, ad esempio X.Y, usando la formula X * 100 + Y come definito dall'estensione del linguaggio ARM C. Ad esempio, per Armv8.1,__ARM_ARCHè 8 * 100 + 1 o 801. Per impostare la versione dell'architettura arm, vedere/arch (ARM64). Questa macro è stata introdotta in Visual Studio 2022 versione 17.10.__ATOM__Definito come 1 quando l'opzione del/favor:ATOMcompilatore è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX__Definito come 1 quando vengono impostate le opzioni del/arch:AVXcompilatore ,/arch:AVX2/arch:AVX512,/arch:AVX10.1, o/arch:AVX10.2e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX2__Definito come 1 quando l'opzione/arch:AVX2del/arch:AVX10.1compilatore ,/arch:AVX512, o/arch:AVX10.2è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX512BW__Definito come 1 quando l'opzione/arch:AVX512del compilatore ,/arch:AVX10.1o/arch:AVX10.2è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX512CD__Definito come 1 quando l'opzione/arch:AVX512del compilatore ,/arch:AVX10.1o/arch:AVX10.2è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX512DQ__Definito come 1 quando l'opzione/arch:AVX512del compilatore ,/arch:AVX10.1o/arch:AVX10.2è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX512F__Definito come 1 quando l'opzione/arch:AVX512del compilatore ,/arch:AVX10.1o/arch:AVX10.2è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX512VL__Definito come 1 quando l'opzione/arch:AVX512del compilatore ,/arch:AVX10.1o/arch:AVX10.2è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.__AVX10_VER__Definito come numero intero che rappresenta la versione di AVX10 quando è impostata l'opzione/arch:AVX10.1del compilatore o/arch:AVX10.2e la destinazione del compilatore è x86 o x64. In caso contrario, non definito._CHAR_UNSIGNEDDefinito come 1 se il tipo predefinitocharè senza segno. Questo valore viene definito quando è impostata l'opzione del/Jcompilatore (tipo char predefinito non firmato). In caso contrario, non definito.__CLR_VERDefinito come valore letterale integer che rappresenta la versione di Common Language Runtime (CLR) usata per compilare l'app. Il valore viene codificato nel formatoMmmbbbbb, doveMè la versione principale del runtime,mmè la versione secondaria del runtime edbbbbbè il numero di build.__CLR_VERviene definito se l'opzione del/clrcompilatore è impostata. In caso contrario, non definito.// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); }_CONTROL_FLOW_GUARDDefinito come 1 quando è impostata l'opzione del/guard:cfcompilatore (Abilita Protezione flusso di controllo). In caso contrario, non definito.__COUNTER__Si espande in un valore letterale integer che inizia da 0. Il valore viene incrementato di 1 ogni volta che viene usato in un file di origine o nelle intestazioni incluse del file di origine.__COUNTER__memorizza lo stato quando si usano intestazioni precompilate. Questa macro è sempre definita.In questo esempio viene
__COUNTER__usato per assegnare identificatori univoci a tre oggetti diversi dello stesso tipo. IlexampleClasscostruttore accetta un numero intero come parametro. Inmainl'applicazione dichiara tre oggetti di tipoexampleClass, usando__COUNTER__come parametro di identificatore univoco:// 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_cliDefinito come valore letterale integer 200406 quando viene compilato come C++ e viene impostata un'opzione/clrdel compilatore. In caso contrario, non definito. Se definito,__cplusplus_cliè attivo in tutta l'unità di conversione.// 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_winrtDefinito come valore letterale integer 201009 quando viene compilato come C++ e viene impostata l'opzione del/ZWcompilatore (compilazione Di Windows Runtime). In caso contrario, non definito._CPPRTTIDefinito come 1 se è impostata l'opzione del/GRcompilatore (Abilita informazioni sul tipo di runtime). In caso contrario, non definito._CPPUNWINDDefinito come 1 se vengono impostate una o più opzioni del/GXcompilatore (Abilita gestione eccezioni),/clr(Compilazione Common Language Runtime) o/EH(Modello di gestione delle eccezioni). In caso contrario, non definito._DEBUGDefinito come 1 quando è impostata l'opzione/LDddel compilatore ,/MDdo/MTd. In caso contrario, non definito._DLLDefinito come 1 quando è impostata l'opzione del/MDcompilatore o/MDd(DLL multithreading). In caso contrario, non definito.__FUNCDNAME__Definito come valore letterale stringa che contiene il nome decorato della funzione contenitore. La macro è definita solo all'interno di una funzione. La__FUNCDNAME__macro non viene espansa se si usa l'opzione del/EPcompilatore o/P.In questo esempio vengono utilizzate le
__FUNCDNAME__macro ,__FUNCSIG__e__FUNCTION__per visualizzare le informazioni sulla funzione.// 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__Definito come valore letterale stringa che contiene la firma della funzione contenitore. La macro è definita solo all'interno di una funzione. La__FUNCSIG__macro non viene espansa se si usa l'opzione del/EPcompilatore o/P. Quando viene compilato per una destinazione a 64 bit, la convenzione di chiamata è__cdeclper impostazione predefinita. Per un esempio di utilizzo, vedere la__FUNCDNAME__macro.__FUNCTION__Definito come valore letterale stringa che contiene il nome non dichiarato della funzione contenitore. La macro è definita solo all'interno di una funzione. La__FUNCTION__macro non viene espansa se si usa l'opzione del/EPcompilatore o/P. Per un esempio di utilizzo, vedere la__FUNCDNAME__macro._INTEGRAL_MAX_BITSDefinito come valore letterale intero 64, la dimensione massima (in bit) per un tipo integrale non operatore. Questa macro è sempre definita.// integral_max_bits.cpp #include <stdio.h> int main() { printf("%d\n", _INTEGRAL_MAX_BITS); }__INTELLISENSE__Definito come 1 durante un passaggio del compilatore IntelliSense nell'IDE di Visual Studio. In caso contrario, non definito. È possibile usare questa macro per proteggere il codice che il compilatore IntelliSense non riconosce o lo usa per alternare la compilazione e il compilatore IntelliSense.You can use this macro to guard code the IntelliSense compiler doesn't understand, or use it to toggle between the build and IntelliSense compiler. Per altre informazioni, vedere Suggerimenti per la risoluzione dei problemi relativi alla lentezza di IntelliSense._ISO_VOLATILEDefinito come 1 se l'opzione del/volatile:isocompilatore è impostata. In caso contrario, non definito._KERNEL_MODEDefinito come 1 se è impostata l'opzione del/kernelcompilatore (Crea file binario in modalità kernel). In caso contrario, non definito._M_AMD64Definito come valore letterale intero 100 per le compilazioni destinate a processori x64 o ARM64EC. In caso contrario, non definito._M_ARMDefinito come valore letterale intero 7 per le compilazioni destinate ai processori ARM. Non definito per ARM64, ARM64EC e altre destinazioni._M_ARM_ARMV7VEDefinito come 1 quando l'opzione del/arch:ARMv7VEcompilatore è impostata per le compilazioni destinate ai processori ARM. In caso contrario, non definito._M_ARM_FPDefinito come valore letterale integer che indica l'opzione/archdel compilatore impostata per le destinazioni del processore ARM. In caso contrario, non definito.Valore compreso nell'intervallo da 30 a 39 se non è stata specificata alcuna
/archopzione ARM, che indica che è stata impostata l'architettura predefinita per ARM (VFPv3).Valore compreso nell'intervallo da 40 a 49 se
/arch:VFPv4è stato impostato.Per altre informazioni, vedere
/arch(ARM).
_M_ARM64Definito come 1 per le compilazioni destinate ad ARM64. In caso contrario, non definito._M_ARM64ECDefinito come 1 per le compilazioni destinate ARM64EC. In caso contrario, non definito._M_CEEDefinito come 001 se è impostata un'opzione/clrdel compilatore (compilazione Common Language Runtime). In caso contrario, non definito._M_CEE_PUREDeprecato a partire da Visual Studio 2015. Definito come 001 se l'opzione del/clr:purecompilatore è impostata. In caso contrario, non definito._M_CEE_SAFEDeprecato a partire da Visual Studio 2015. Definito come 001 se l'opzione del/clr:safecompilatore è impostata. In caso contrario, non definito._M_FP_CONTRACTDisponibile a partire da Visual Studio 2022. Definito come 1 se è impostata l'opzione del/fp:contractcompilatore o/fp:fast. In caso contrario, non definito._M_FP_EXCEPTDefinito come 1 se è impostata l'opzione del/fp:exceptcompilatore o/fp:strict. In caso contrario, non definito._M_FP_FASTDefinito come 1 se l'opzione del/fp:fastcompilatore è impostata. In caso contrario, non definito._M_FP_PRECISEDefinito come 1 se l'opzione del/fp:precisecompilatore è impostata. In caso contrario, non definito._M_FP_STRICTDefinito come 1 se l'opzione del/fp:strictcompilatore è impostata. In caso contrario, non definito._M_IX86Definito come valore letterale intero 600 per le compilazioni destinate ai processori x86. Questa macro non è definita per le destinazioni di compilazione x64 o ARM._M_IX86_FPDefinito come valore letterale integer che indica l'opzione/archdel compilatore impostata o l'impostazione predefinita. Questa macro viene sempre definita quando la destinazione di compilazione è un processore x86. In caso contrario, non definito. Se definito, il valore è:0 se è stata impostata l'opzione del
/arch:IA32compilatore.1 se è stata impostata l'opzione del
/arch:SSEcompilatore.2 se è stata impostata l'opzione
/arch:SSE2del compilatore ,/arch:AVX/arch:AVX512/arch:AVX2,/arch:AVX10.1o ./arch:AVX10.2Questo valore è l'impostazione predefinita se non è stata specificata un'opzione/archdel compilatore. Quando/arch:AVXviene specificato, viene definita anche la macro__AVX__. Quando/arch:AVX2viene specificato, vengono definiti sia che__AVX____AVX2__. Quando/arch:AVX512viene specificato ,__AVX__,__AVX2____AVX512BW____AVX512CD____AVX512DQ__,__AVX512F__e__AVX512VL__vengono definiti anche . Quando/arch:AVX10.1o/arch:AVX10.2è specificato, vengono definiti anche ,__AVX512DQ____AVX512CD____AVX____AVX512BW____AVX512F____AVX2__,__AVX512VL__e .__AVX10_VER__Per altre informazioni, vedere (x86).For more information, see
/arch(x86).
_M_X64Definito come valore letterale intero 100 per le compilazioni destinate a processori x64 o ARM64EC. In caso contrario, non definito._MANAGEDDefinito come 1 quando è impostata l'opzione del/clrcompilatore. In caso contrario, non definito._MSC_BUILDDefinito come valore letterale integer che contiene l'elemento numero di revisione del numero di versione del compilatore. Il numero di revisione è l'ultimo elemento del numero di versione delimitato dal punto. Ad esempio, se il numero di versione del compilatore Microsoft C/C++ è 15.00.20706.01, la_MSC_BUILDmacro è 1. Questa macro è sempre definita._MSC_EXTENSIONSDefinito come 1 se è impostata l'opzione del compilatore on-by-default/Ze(Enable Language Extensions). In caso contrario, non definito._MSC_FULL_VERDefinito come valore letterale integer che codifica gli elementi principale, secondario e numero di build del numero di versione del compilatore. Il numero principale è il primo elemento del numero di versione delimitato da punti, il numero secondario è il secondo elemento e il numero di build è il terzo elemento.Ad esempio, se la versione del compilatore Microsoft C/C++ è 19.39.33519,
_MSC_FULL_VERè 193933519. Immetterecl /?nella riga di comando per visualizzare il numero di versione del compilatore. Questa macro è sempre definita. Per altre informazioni sul controllo delle versioni del compilatore, vedere Controllo delle versioni del compilatore C++ e versioni del servizio a partire da Visual Studio 2017 per altre informazioni su Visual Studio 2019 16.8, 16.9, 16.10 e 16.11, che richiedono_MSC_FULL_VERdi distinguerle._MSC_VERDefinito come valore letterale integer che codifica gli elementi di numero principale e secondario del numero di versione del compilatore. Il numero principale è il primo elemento del numero di versione delimitato dal punto e il numero secondario è il secondo elemento. Ad esempio, se il numero di versione del compilatore Microsoft C/C++ è 17.00.51106.1, il valore di_MSC_VERè 1700. Immetterecl /?nella riga di comando per visualizzare il numero di versione del compilatore. Questa macro è sempre definita.Per testare le versioni o gli aggiornamenti del compilatore in una determinata versione di Visual Studio o versioni successive, usare l'operatore
>=. È possibile usarla in una direttiva condizionale per confrontarla_MSC_VERcon quella versione nota. Se sono disponibili diverse versioni che si escludono a vicenda da confrontare, ordinare i confronti in ordine decrescente del numero di versione. Ad esempio, questo codice verifica la presenza di compilatori rilasciati in Visual Studio 2017 e versioni successive. Verifica quindi la presenza di compilatori rilasciati in o dopo Visual Studio 2015. Verifica quindi la presenza di tutti i compilatori rilasciati prima di Visual Studio 2015:#if _MSC_VER >= 1910 // . . . #elif _MSC_VER >= 1900 // . . . #else // . . . #endifPer altre informazioni su Visual Studio 2019 16.8 e 16.9 e 16.10 e 16.11, che condividono le stesse versioni principali e secondarie (e quindi hanno lo stesso valore per
_MSC_VER), vedere Versioni del servizio a partire da Visual Studio 2017.Per altre informazioni sulla cronologia del controllo delle versioni del compilatore e sui numeri di versione del compilatore e sulle versioni di Visual Studio a cui corrispondono, vedere Controllo delle versioni del compilatore C++. Inoltre, versione del compilatore Visual C++ nel blog del team di Microsoft C++.
_MSVC_LANGDefinito come valore letterale integer che specifica lo standard del linguaggio C++ di destinazione del compilatore. Solo il codice compilato come C++ lo imposta. La macro è il valore201402Lletterale integer per impostazione predefinita o quando viene specificata l'opzione del/std:c++14compilatore. La macro è impostata su201703Lse è specificata l'opzione del/std:c++17compilatore. La macro è impostata su202002Lse è specificata l'opzione del/std:c++20compilatore. È impostato su un valore più alto e non specificato quando viene specificata l'opzione/std:c++latest. In caso contrario, la macro non è definita. Le opzioni del_MSVC_LANGcompilatore macro e/std(Specifica versione standard del linguaggio) sono disponibili a partire da Visual Studio 2015 Update 3.__MSVC_RUNTIME_CHECKSDefinito come 1 quando viene impostata una delle opzioni del/RTCcompilatore. In caso contrario, non definito._MSVC_TRADITIONAL:- Disponibile a partire da Visual Studio 2017 versione 15.8: definito come 0 quando è impostata l'opzione del compilatore per la modalità
/experimental:preprocessordi conformità del preprocessore. Definito come 1 per impostazione predefinita o quando è impostata l'opzione del/experimental:preprocessor-compilatore, per indicare che il preprocessore tradizionale è in uso. - Disponibile a partire da Visual Studio 2019 versione 16.5: definito come 0 quando è impostata l'opzione del compilatore della modalità
/Zc:preprocessordi conformità del preprocessore. Definito come 1 per impostazione predefinita o quando è impostata l'opzione del/Zc:preprocessor-compilatore, per indicare che il preprocessore tradizionale è in uso (essenzialmente/Zc:preprocessorsostituisce l'opzione deprecata/experimental:preprocessor).
#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL // Logic using the traditional preprocessor #else // Logic using cross-platform compatible preprocessor #endif- Disponibile a partire da Visual Studio 2017 versione 15.8: definito come 0 quando è impostata l'opzione del compilatore per la modalità
_MTDefinito come 1 quando/MDviene specificata o/MDd(DLL multithreading) o/MT/MTd(multithreading). In caso contrario, non definito._NATIVE_WCHAR_T_DEFINEDDefinito come 1 quando è impostata l'opzione del/Zc:wchar_tcompilatore. In caso contrario, non definito._OPENMPDefinito come valore letterale intero 200203, se è impostata l'opzione del/openmpcompilatore (Abilita supporto OpenMP 2.0). Questo valore rappresenta la data della specifica OpenMP implementata da MSVC. In caso contrario, non definito.// _OPENMP_dir.cpp // compile with: /openmp #include <stdio.h> int main() { printf("%d\n", _OPENMP); }_PREFAST_Definito come 1 quando è impostata l'opzione del/analyzecompilatore. In caso contrario, non definito.__SANITIZE_ADDRESS__Disponibile a partire da Visual Studio 2019 versione 16.9. Definito come 1 quando è impostata l'opzione del/fsanitize=addresscompilatore. In caso contrario, non definito.__TIMESTAMP__Definito come valore letterale stringa che contiene la data e l'ora dell'ultima modifica del file di origine corrente, nel formato abbreviato di lunghezza costante restituito dalla funzione CRTasctime,Fri 19 Aug 13:32:58 2016ad esempio . Questa macro è sempre definita._VC_NODEFAULTLIBDefinito come 1 quando è impostata l'opzione del/Zlcompilatore (Omit Default Library Name). In caso contrario, non definito._WCHAR_T_DEFINEDDefinito come 1 quando è impostata l'opzione del compilatore predefinita/Zc:wchar_t. La_WCHAR_T_DEFINEDmacro è definita ma non ha alcun valore se l'opzione del/Zc:wchar_t-compilatore è impostata ewchar_tviene definita in un file di intestazione di sistema incluso nel progetto. In caso contrario, non definito._WIN32Definito come 1 quando la destinazione di compilazione è ARM a 32 bit, ARM a 64 bit, x86, x64 o ARM64EC. In caso contrario, non definito._WIN64Definito come 1 quando la destinazione di compilazione è ARM a 64 bit, x64 o ARM64EC. In caso contrario, non definito._WINRT_DLLDefinito come 1 quando viene compilato come C++ e entrambe/ZW(compilazione di Windows Runtime) e/LDo/LDdle opzioni del compilatore sono impostate. In caso contrario, non definito.
Nessuna macro del preprocessore che identifica la versione della libreria ATL o MFC è predefinita dal compilatore. Le intestazioni della libreria ATL e MFC definiscono internamente queste macro di versione. Non sono definiti nelle direttive del preprocessore effettuate prima dell'inserimento dell'intestazione obbligatoria.
_ATL_VERDefinito in<atldef.h>come valore letterale integer che codifica il numero di versione ATL._MFC_VERDefinito in<afxver_.h>come valore letterale integer che codifica il numero di versione MFC.
Vedi anche
Macro (C/C++)
Operatori del preprocessore
Direttive del preprocessore