Macro predefinite

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 di char.

    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.

  • __cplusplus Definito 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 #line direttiva . 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 /Za compilatore. A partire da Visual Studio 2022 versione 17.2, viene definito come 1 quando viene compilato come C e se è specificata l'opzione del /std:c11 compilatore o /std:c17 . 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 /std opzioni 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 /std opzioni 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 /std opzioni 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 /std opzioni C11 o C17.

  • __STDC_VERSION__ Definito quando viene compilato come C e viene specificata una delle /std opzioni C11 o C17. Si espande in 201112L per /std:c11e 201710L per /std:c17.

  • __STDCPP_DEFAULT_NEW_ALIGNMENT__ Quando /std:c17 si specifica o versione successiva, questa macro si espande in un size_t valore letterale con il valore dell'allineamento garantito da una chiamata a alignment-unware operator new. Gli allineamenti più grandi vengono passati a un overload compatibile con l'allineamento, ad esempio operator 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:

  • __ATOM__ Definito come 1 quando l'opzione del /favor:ATOM compilatore è 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:AVX2o /arch:AVX512 e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.

  • __AVX2__ Definito come 1 quando l'opzione del /arch:AVX2 compilatore o /arch:AVX512 è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.

  • __AVX512BW__ Definito come 1 quando l'opzione del /arch:AVX512 compilatore è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.

  • __AVX512CD__ Definito come 1 quando l'opzione del /arch:AVX512 compilatore è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.

  • __AVX512DQ__ Definito come 1 quando l'opzione del /arch:AVX512 compilatore è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.

  • __AVX512F__ Definito come 1 quando l'opzione del /arch:AVX512 compilatore è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.

  • __AVX512VL__ Definito come 1 quando l'opzione del /arch:AVX512 compilatore è impostata e la destinazione del compilatore è x86 o x64. In caso contrario, non definito.

  • _CHAR_UNSIGNED Definito come 1 se il tipo predefinito char è senza segno. Questo valore viene definito quando è impostata l'opzione del /J compilatore (tipo char predefinito non firmato). In caso contrario, non definito.

  • __CLR_VER Definito come valore letterale integer che rappresenta la versione di Common Language Runtime (CLR) usata per compilare l'app. Il valore viene codificato nel formato Mmmbbbbb, dove M è la versione principale del runtime, mm è la versione secondaria del runtime ed bbbbb è il numero di build. __CLR_VER viene definito se l'opzione del /clr compilatore è 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:cf compilatore (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. Il exampleClass costruttore accetta un numero intero come parametro. In mainl'applicazione dichiara tre oggetti di tipo exampleClass, 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_cli Definito come valore letterale integer 200406 quando viene compilato come C++ e viene impostata un'opzione /clr del 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 /ZW compilatore (compilazione Di Windows Runtime). In caso contrario, non definito.

  • _CPPRTTIDefinito come 1 se è impostata l'opzione del /GR compilatore (Abilita informazioni sul tipo di runtime). In caso contrario, non definito.

  • _CPPUNWINDDefinito come 1 se vengono impostate una o più opzioni del /GX compilatore (Abilita gestione eccezioni),/clr(Compilazione Common Language Runtime) o /EH (Modello di gestione delle eccezioni). In caso contrario, non definito.

  • _DEBUG Definito come 1 quando è impostata l'opzione /LDddel compilatore , /MDdo /MTd . In caso contrario, non definito.

  • _DLL Definito come 1 quando è impostata l'opzione del /MD compilatore 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 /EP compilatore 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 /EP compilatore o /P . Quando viene compilato per una destinazione a 64 bit, la convenzione di chiamata è __cdecl per 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 /EP compilatore o /P . Per un esempio di utilizzo, vedere la __FUNCDNAME__ macro.

  • _INTEGRAL_MAX_BITS Definito come valore letterale intero 64, la dimensione massima (in bit) per un tipo integrale non vettoriale. 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 Risoluzione dei problemi Suggerimenti per lentezza di IntelliSense.

  • _ISO_VOLATILE Definito come 1 se l'opzione del /volatile:iso compilatore è impostata. In caso contrario, non definito.

  • _KERNEL_MODE Definito come 1 se è impostata l'opzione del /kernel compilatore (Crea file binario in modalità kernel). In caso contrario, non definito.

  • _M_AMD64 Definito come valore letterale intero 100 per le compilazioni destinate a processori x64 o ARM64EC. In caso contrario, non definito.

  • _M_ARM Definito come valore letterale intero 7 per le compilazioni destinate ai processori ARM. Non definito per ARM64, ARM64EC e altre destinazioni.

  • _M_ARM_ARMV7VE Definito come 1 quando l'opzione del /arch:ARMv7VE compilatore è impostata per le compilazioni destinate ai processori ARM. In caso contrario, non definito.

  • _M_ARM_FP Definito come valore letterale integer che indica l'opzione /arch del 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 /arch opzione 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_ARM64 Definito come 1 per le compilazioni destinate ad ARM64. In caso contrario, non definito.

  • _M_ARM64EC Definito come 1 per le compilazioni destinate ARM64EC. In caso contrario, non definito.

  • _M_CEEDefinito come 001 se è impostata un'opzione /clr del compilatore (compilazione Common Language Runtime). In caso contrario, non definito.

  • _M_CEE_PURE Deprecato a partire da Visual Studio 2015. Definito come 001 se l'opzione del /clr:pure compilatore è impostata. In caso contrario, non definito.

  • _M_CEE_SAFE Deprecato a partire da Visual Studio 2015. Definito come 001 se l'opzione del /clr:safe compilatore è impostata. In caso contrario, non definito.

  • _M_FP_CONTRACT Disponibile a partire da Visual Studio 2022. Definito come 1 se è impostata l'opzione del /fp:contract compilatore o /fp:fast . In caso contrario, non definito.

  • _M_FP_EXCEPT Definito come 1 se è impostata l'opzione del /fp:except compilatore o /fp:strict . In caso contrario, non definito.

  • _M_FP_FAST Definito come 1 se l'opzione del /fp:fast compilatore è impostata. In caso contrario, non definito.

  • _M_FP_PRECISE Definito come 1 se l'opzione del /fp:precise compilatore è impostata. In caso contrario, non definito.

  • _M_FP_STRICT Definito come 1 se l'opzione del /fp:strict compilatore è impostata. In caso contrario, non definito.

  • _M_IX86 Definito 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_FP Definito come valore letterale integer che indica l'opzione /arch del 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:IA32 compilatore.

    • 1 se è stata impostata l'opzione del /arch:SSE compilatore.

    • 2 se è stata impostata l'opzione /arch:SSE2del compilatore , /arch:AVX/arch:AVX2, o /arch:AVX512 . Questo valore è l'impostazione predefinita se non è stata specificata un'opzione /arch del compilatore. Quando /arch:AVX viene specificato, viene definita anche la macro __AVX__ . Quando /arch:AVX2 viene specificato, vengono definiti sia che __AVX____AVX2__ . Quando /arch:AVX512 viene specificato , __AVX__, __AVX2____AVX512BW____AVX512DQ____AVX512CD__, __AVX512F__e __AVX512VL__ vengono definiti anche .

    • Per altre informazioni, vedere (x86).For more information, see /arch (x86).

  • _M_X64 Definito come valore letterale intero 100 per le compilazioni destinate a processori x64 o ARM64EC. In caso contrario, non definito.

  • _MANAGED Definito come 1 quando è impostata l'opzione del /clr compilatore. In caso contrario, non definito.

  • _MSC_BUILD Definito 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_BUILD macro è 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_VER Definito 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. Immettere cl /? 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_VER di distinguerle.

  • _MSC_VER Definito 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. Immettere cl /? 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_VER con 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
    // . . .
    #endif
    

    Per 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_LANG Definito come valore letterale integer che specifica lo standard del linguaggio C++ di destinazione del compilatore. È impostato solo nel codice compilato come C++. La macro è il valore 201402L letterale integer per impostazione predefinita o quando viene specificata l'opzione del /std:c++14 compilatore. La macro è impostata su 201703L se è specificata l'opzione del /std:c++17 compilatore. La macro è impostata su 202002L se è specificata l'opzione del /std:c++20 compilatore. È 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_LANG compilatore macro e /std (Specifica versione standard del linguaggio) sono disponibili a partire da Visual Studio 2015 Update 3.

  • __MSVC_RUNTIME_CHECKS Definito come 1 quando viene impostata una delle opzioni del /RTC compilatore. 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:preprocessor di 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:preprocessor di 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:preprocessor sostituisce l'opzione deprecata /experimental:preprocessor).
    #if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
    // Logic using the traditional preprocessor
    #else
    // Logic using cross-platform compatible preprocessor
    #endif
    
  • _MTDefinito come 1 quando /MD viene specificata o /MDd (DLL multithreading) o /MTd/MT (multithreading). In caso contrario, non definito.

  • _NATIVE_WCHAR_T_DEFINED Definito come 1 quando è impostata l'opzione del /Zc:wchar_t compilatore. In caso contrario, non definito.

  • _OPENMPDefinito come valore letterale intero 200203, se è impostata l'opzione del /openmp compilatore (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 /analyze compilatore. 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=address compilatore. 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 CRT asctime , Fri 19 Aug 13:32:58 2016ad esempio . Questa macro è sempre definita.

  • _VC_NODEFAULTLIBDefinito come 1 quando è impostata l'opzione del /Zl compilatore (Omit Default Library Name). In caso contrario, non definito.

  • _WCHAR_T_DEFINED Definito come 1 quando è impostata l'opzione del compilatore predefinita /Zc:wchar_t . La _WCHAR_T_DEFINED macro è definita ma non ha alcun valore se l'opzione del /Zc:wchar_t- compilatore è impostata e wchar_t viene definita in un file di intestazione di sistema incluso nel progetto. In caso contrario, non definito.

  • _WIN32 Definito come 1 quando la destinazione di compilazione è ARM a 32 bit, ARM a 64 bit, x86 o x64. In caso contrario, non definito.

  • _WIN64 Definito come 1 quando la destinazione di compilazione è ARM a 64 bit o x64. In caso contrario, non definito.

  • _WINRT_DLL Definito come 1 quando viene compilato come C++ e entrambe /ZW (compilazione di Windows Runtime) e /LD o /LDd le 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_VER Definito in <atldef.h> come valore letterale integer che codifica il numero di versione ATL.

  • _MFC_VER Definito 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