Macros d’options du compilateur
Ces macros contrôlent des fonctionnalités de compilateur spécifiques.
Macro | Description |
---|---|
_ATL_ALL_WARNINGS |
Symbole qui active les erreurs dans les projets convertis à partir des versions précédentes d’ATL. |
_ATL_APARTMENT_THREADED |
Définissez si un ou plusieurs de vos objets utilisent le thread d’appartement. |
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS |
Rend certains CString constructeurs explicites, empêchant les conversions involontaires. |
_ATL_ENABLE_PTM_WARNING |
Définissez cette macro pour exiger la syntaxe standard C++. Elle génère l’erreur du compilateur C4867 lorsque la syntaxe non standard est utilisée pour initialiser un pointeur vers une fonction membre. |
_ATL_FREE_THREADED |
Définissez si un ou plusieurs de vos objets utilisent le thread libre ou neutre. |
_ATL_MODULES |
Vous permet de compiler des projets ATL avec permissive et d’utiliser ATL avec des modules C++. |
_ATL_MULTI_THREADED |
Symbole qui indique que le projet a des objets marqués comme à la fois, Libres ou Neutres. La macro _ATL_FREE_THREADED doit être utilisée à la place. |
_ATL_NO_AUTOMATIC_NAMESPACE |
Symbole qui empêche l’utilisation par défaut de l’espace de noms comme ATL. |
_ATL_NO_COM_SUPPORT |
Symbole qui empêche la compilation du code COM avec votre projet. |
ATL_NO_VTABLE |
Symbole qui empêche l’initialisation du pointeur vtable dans le constructeur et le destructeur de la classe. |
ATL_NOINLINE |
Symbole qui indique qu’une fonction ne doit pas être insérée. |
_ATL_SINGLE_THREADED |
Définissez si tous vos objets utilisent le modèle de thread unique. |
_ATL_ALL_WARNINGS
Symbole qui active les erreurs dans les projets convertis à partir des versions précédentes d’ATL.
#define _ATL_ALL_WARNINGS
Notes
Avant Visual C++ .NET 2002, ATL a désactivé de nombreux avertissements et les a laissé désactivés afin qu’ils n’apparaissent jamais dans le code utilisateur. Plus précisément :
L’expression conditionnelle C4127 est constante
C4786 'identifier' : l’identificateur a été tronqué en caractères 'nombre' dans les informations de débogage
Extension non standard C4201 utilisée : struct/union sans nom
C4103 'filename' : utilisé #pragma pack pour modifier l’alignement
C4291 'declaration' : aucune suppression d’opérateur correspondante trouvée ; la mémoire ne sera pas libérée si l’initialisation lève une exception
C4268 'identifier' : 'const' static/global data initialisé avec le constructeur par défaut généré par le compilateur remplit l’objet avec zéros
Code inaccessible C4702
Dans les projets convertis à partir des versions précédentes, ces avertissements sont toujours désactivés par les en-têtes de bibliothèques.
Pour modifier ce comportement, ajoutez la ligne suivante au pch.h
fichier (stdafx.h
dans Visual Studio 2017 et versions antérieures) avant d’inclure les en-têtes de bibliothèques.
#define _ATL_ALL_WARNINGS
Si cela #define
est ajouté, les en-têtes ATL sont prudents pour conserver l’état de ces avertissements afin qu’ils ne soient pas désactivés globalement (ou si l’utilisateur désactive explicitement les avertissements individuels, et non pour les activer).
Les nouveaux projets ont cet #define
ensemble dans pch.h (stdafx.h dans Visual Studio 2017 et versions antérieures) par défaut.
_ATL_APARTMENT_THREADED
Définissez si un ou plusieurs de vos objets utilisent le thread d’appartement.
_ATL_APARTMENT_THREADED
Notes
Spécifie le thread d’appartement. Pour obtenir d’autres options et une description des modèles de thread disponibles pour un objet ATL, consultez l’Assistant Spécification du modèle de thread et des options du projet, Assistant Objet simple ATL.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS
Rend certains CString
constructeurs explicites, empêchant les conversions involontaires.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS
Notes
Lorsque ce constructeur est défini, tous les CString
constructeurs qui acceptent un paramètre unique sont compilés avec le mot clé explicite, ce qui empêche les conversions implicites d’arguments d’entrée. Cela signifie, par exemple, qu’en cas _UNICODE
de définition, si vous tentez d’utiliser une char*
chaîne en tant qu’argument CString
de constructeur, une erreur du compilateur se produit. Utilisez cette macro dans les situations où vous devez empêcher les conversions implicites entre les types de chaînes étroites et larges.
En utilisant la _T
macro sur tous les arguments de chaîne de constructeur, vous pouvez définir _ATL_CSTRING_EXPLICIT_CONSTRUCTORS
et éviter les erreurs de compilation, qu’elles soient définies ou non _UNICODE
.
_ATL_ENABLE_PTM_WARNING
Définissez cette macro pour forcer l’utilisation de la syntaxe standard ANSI C++ pour le pointeur vers les fonctions membres. L’utilisation de cette macro entraîne la génération de l’erreur du compilateur C4867 lorsque la syntaxe non standard est utilisée pour initialiser un pointeur vers une fonction membre.
#define _ATL_ENABLE_PTM_WARNING
Notes
Les bibliothèques ATL et MFC ont été modifiées pour correspondre à la conformité C++ améliorée du compilateur Microsoft C++. Selon la norme ANSI C++, la syntaxe d’un pointeur vers une fonction membre de classe doit être &CMyClass::MyFunc
.
Quand _ATL_ENABLE_PTM_WARNING
elle n’est pas définie (cas par défaut), ATL/MFC désactive l’erreur C4867 dans les mappages de macros (notamment les mappages de messages) afin que le code créé dans les versions antérieures puisse continuer à générer comme avant. Si vous définissez _ATL_ENABLE_PTM_WARNING
, votre code doit être conforme à la norme C++.
Toutefois, la forme non standard a été déconseillée. Vous devez déplacer du code existant vers la syntaxe standard C++. Par exemple, le code suivant :
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()
Doit être remplacé par :
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()
Pour les macros cartographiques, ajoutez le caractère '&' ampersand. Vous ne devez pas ajouter à nouveau le caractère dans votre code.
_ATL_FREE_THREADED
Définissez si un ou plusieurs de vos objets utilisent le thread libre ou neutre.
_ATL_FREE_THREADED
Notes
Spécifie le thread libre. Le thread libre équivaut à un modèle d’appartement multithread. Pour obtenir une description des modèles de thread disponibles pour un objet ATL, consultez Spécification du modèle de thread du projet pour d’autres options de thread et options, assistant Objet simple ATL pour obtenir une description des modèles de thread disponibles pour un objet ATL.
_ATL_MODULES
Vous permet de compiler des projets ATL avec permissive-
et d’utiliser ATL avec des modules C++.
_ATL_MODULES
_ATL_MULTI_THREADED
Symbole qui indique que le projet a des objets marqués comme Les deux, Free ou Neutral.
_ATL_MULTI_THREADED
Notes
Si ce symbole est défini, ATL extrait le code qui synchronisera correctement l’accès aux données globales. Le nouveau code doit utiliser la macro _ATL_FREE_THREADED
équivalente à la place.
_ATL_NO_AUTOMATIC_NAMESPACE
Symbole qui empêche l’utilisation par défaut de l’espace de noms comme ATL.
_ATL_NO_AUTOMATIC_NAMESPACE
Notes
Si ce symbole n’est pas défini, y compris atlbase.h
les exécutions using namespace ATL
par défaut, ce qui peut entraîner des conflits de nommage. Pour éviter cela, définissez ce symbole.
_ATL_NO_COM_SUPPORT
Symbole qui empêche la compilation du code COM avec votre projet.
_ATL_NO_COM_SUPPORT
ATL_NO_VTABLE
Symbole qui empêche l’initialisation du pointeur vtable dans le constructeur et le destructeur de la classe.
ATL_NO_VTABLE
Notes
Si le pointeur de la table virtuelle est empêché d’être initialisé dans le constructeur et le destructeur de la classe, l’éditeur de liens peut éliminer la table virtuelle et toutes les fonctions vers lesquelles il pointe. Se développe sur __declspec(novtable)
.
Exemple
class ATL_NO_VTABLE CMyClass2 :
ATL_NOINLINE
Symbole qui indique qu’une fonction ne doit pas être insérée.
ATL_NOINLINE inline
myfunction()
{
...
}
Paramètres
myfunction
Fonction qui ne doit pas être insérée.
Notes
Utilisez ce symbole si vous souhaitez vous assurer qu’une fonction n’est pas insérée par le compilateur, même si elle doit être déclarée comme inline afin qu’elle puisse être placée dans un fichier d’en-tête. Se développe sur __declspec(noinline)
.
_ATL_SINGLE_THREADED
Définir si tous vos objets utilisent le modèle de thread unique
_ATL_SINGLE_THREADED
Notes
Spécifie que l’objet s’exécute toujours dans le thread COM principal. Pour obtenir une description des modèles de thread disponibles pour un objet ATL, consultez Spécification du modèle de thread du projet pour d’autres options de thread et options, assistant Objet simple ATL pour obtenir une description des modèles de thread disponibles pour un objet ATL.