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.