Condividi tramite


Macro di opzioni del compilatore

Queste macro controllano funzionalità specifiche del compilatore.

Macro Descrizione
_ATL_ALL_WARNINGS Simbolo che abilita gli errori nei progetti convertiti da versioni precedenti di ATL.
_ATL_APARTMENT_THREADED Definire se uno o più oggetti usano il threading apartment.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Rende espliciti determinati CString costruttori, impedendo conversioni involontarie.
_ATL_ENABLE_PTM_WARNING Definire questa macro per richiedere la sintassi standard C++. Genera l'errore del compilatore C4867 quando viene usata la sintassi non standard per inizializzare un puntatore a una funzione membro.
_ATL_FREE_THREADED Definire se uno o più oggetti usano threading libero o neutro.
_ATL_MODULES Consente di compilare progetti ATL con permissive- e usare ATL con i moduli C++.
_ATL_MULTI_THREADED Simbolo che indica che il progetto ha oggetti contrassegnati come Entrambi, Libero o Neutro. La macro _ATL_FREE_THREADED deve essere invece utilizzata.
_ATL_NO_AUTOMATIC_NAMESPACE Simbolo che impedisce l'uso predefinito dello spazio dei nomi come ATL.
_ATL_NO_COM_SUPPORT Simbolo che impedisce la compilazione del codice correlato a COM con il progetto.
ATL_NO_VTABLE Simbolo che impedisce l'inizializzazione del puntatore della tabella virtuale nel costruttore e nel distruttore della classe.
ATL_NOINLINE Simbolo che indica che una funzione non deve essere inlined.
_ATL_SINGLE_THREADED Definire se tutti gli oggetti usano il modello a threading singolo.

_ATL_ALL_WARNINGS

Simbolo che abilita gli errori nei progetti convertiti da versioni precedenti di ATL.

#define _ATL_ALL_WARNINGS

Osservazioni:

Prima di Visual C++ .NET 2002, ATL ha disabilitato molti avvisi e li ha lasciati disabilitati in modo che non siano mai visualizzati nel codice utente. In particolare:

  • L'espressione condizionale C4127 è costante

  • C4786 'identifier': identificatore troncato a caratteri 'number' nelle informazioni di debug

  • Estensione C4201 non standard usata: struct/union senza nome

  • C4103 'filename': usato #pragma pack per modificare l'allineamento

  • C4291 'declaration': nessun operatore corrispondente eliminato; la memoria non verrà liberata se l'inizializzazione genera un'eccezione

  • C4268 'identifier': dati statici/globali 'const' inizializzati con il costruttore predefinito generato dal compilatore riempie l'oggetto con zeri

  • Codice non raggiungibile C4702

Nei progetti convertiti da versioni precedenti, questi avvisi sono ancora disabilitati dalle intestazioni delle librerie.

Per modificare questo comportamento, aggiungere la riga seguente al pch.h file (stdafx.h in Visual Studio 2017 e versioni precedenti) prima di includere le intestazioni delle librerie.

#define _ATL_ALL_WARNINGS

Se questa #define operazione viene aggiunta, le intestazioni ATL sono attenti a mantenere lo stato di questi avvisi in modo che non siano disabilitati a livello globale (o se l'utente disabilita esplicitamente singoli avvisi, non per abilitarli).

I nuovi progetti hanno questo #define set in pch.h (stdafx.h in Visual Studio 2017 e versioni precedenti) per impostazione predefinita.

_ATL_APARTMENT_THREADED

Definire se uno o più oggetti usano il threading apartment.

_ATL_APARTMENT_THREADED

Osservazioni:

Specifica il threading apartment. Per altre opzioni e una descrizione dei modelli di threading disponibili per un oggetto ATL, vedere Specifica del modello di threading e delle opzioni del progetto, Creazione guidata oggetti semplici ATL.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Rende espliciti determinati CString costruttori, impedendo conversioni involontarie.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Osservazioni:

Quando questo costruttore viene definito, tutti i CString costruttori che accettano un singolo parametro vengono compilati con la parola chiave esplicita, che impedisce conversioni implicite di argomenti di input. Ciò significa, ad esempio, che quando _UNICODE viene definito, se si tenta di usare una char* stringa come argomento del CString costruttore, viene restituito un errore del compilatore. Utilizzare questa macro in situazioni in cui è necessario impedire conversioni implicite tra tipi stringa narrow e wide.

Utilizzando la _T macro su tutti gli argomenti della stringa del costruttore, è possibile definire _ATL_CSTRING_EXPLICIT_CONSTRUCTORS ed evitare errori di compilazione indipendentemente dal fatto che _UNICODE sia definito.

_ATL_ENABLE_PTM_WARNING

Definire questa macro per forzare l'uso della sintassi conforme allo standard ANSI C++ per il puntatore alle funzioni membro. L'utilizzo di questa macro determina la generazione dell'errore del compilatore C4867 quando viene utilizzata la sintassi non standard per inizializzare un puntatore a una funzione membro.

#define _ATL_ENABLE_PTM_WARNING

Osservazioni:

Le librerie ATL e MFC sono state modificate in modo che corrispondano alla conformità C++ migliorata del compilatore C++. In base allo standard ANSI C++, la sintassi di un puntatore a una funzione membro della classe deve essere &CMyClass::MyFunc.

Quando _ATL_ENABLE_PTM_WARNING non è definito (caso predefinito), ATL/MFC disabilita l'errore C4867 nelle mappe macro (in particolare mappe messaggi) in modo che il codice creato nelle versioni precedenti possa continuare a essere compilato come in precedenza. Se si definisce _ATL_ENABLE_PTM_WARNING, il codice deve essere conforme allo standard C++.

Tuttavia, il modulo non standard è stato deprecato. È necessario spostare il codice esistente nella sintassi standard C++. Ad esempio, il seguente codice:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()

Devono essere modificati in:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()

Per le macro della mappa, aggiungere il carattere '&' e commerciale. Non è consigliabile aggiungere di nuovo il carattere nel codice.

_ATL_FREE_THREADED

Definire se uno o più oggetti usano threading libero o neutro.

_ATL_FREE_THREADED

Osservazioni:

Specifica il threading libero. Il threading libero equivale a un modello apartment multithread. Per una descrizione dei modelli di threading disponibili per un oggetto ATL, vedere Specifica del modello di threading per altre opzioni di threading e Opzioni.

_ATL_MODULES

Consente di compilare progetti ATL con permissive- e usare ATL con i moduli C++.

_ATL_MODULES

_ATL_MULTI_THREADED

Simbolo che indica che il progetto ha oggetti contrassegnati come Entrambi, Libero o Neutro.

_ATL_MULTI_THREADED

Osservazioni:

Se questo simbolo è definito, ATL esegue il pull nel codice che sincronizza correttamente l'accesso ai dati globali. Il nuovo codice deve invece usare la macro _ATL_FREE_THREADED equivalente.

_ATL_NO_AUTOMATIC_NAMESPACE

Simbolo che impedisce l'uso predefinito dello spazio dei nomi come ATL.

_ATL_NO_AUTOMATIC_NAMESPACE

Osservazioni:

Se questo simbolo non è definito, incluse atlbase.h le prestazioni using namespace ATL per impostazione predefinita, che possono causare conflitti di denominazione. Per evitare questo problema, definire questo simbolo.

_ATL_NO_COM_SUPPORT

Simbolo che impedisce la compilazione del codice correlato a COM con il progetto.

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

Simbolo che impedisce l'inizializzazione del puntatore della tabella virtuale nel costruttore e nel distruttore della classe.

ATL_NO_VTABLE

Osservazioni:

Se il puntatore vtable non viene inizializzato nel costruttore e nel distruttore della classe, il linker può eliminare la tabella virtuale e tutte le funzioni a cui punta. Si espande fino a __declspec(novtable).

Esempio

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Simbolo che indica che una funzione non deve essere inlined.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parametri

myfunction
Funzione che non deve essere inlined.

Osservazioni:

Usare questo simbolo se si vuole assicurarsi che una funzione non venga inlined dal compilatore, anche se deve essere dichiarata come inline in modo che possa essere inserita in un file di intestazione. Si espande fino a __declspec(noinline).

_ATL_SINGLE_THREADED

Definire se tutti gli oggetti usano il modello a threading singolo

_ATL_SINGLE_THREADED

Osservazioni:

Specifica che l'oggetto viene sempre eseguito nel thread COM primario. Per una descrizione dei modelli di threading disponibili per un oggetto ATL, vedere Specifica del modello di threading per altre opzioni di threading e Opzioni.

Vedi anche

Macro