Partager via


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.

Voir aussi

Macros