Avertissement du compilateur (niveau 1) C5105
l’expansion de macro produisant « defined » a un comportement non défini
Notes
Le préprocesseur a détecté un defined
opérateur dans la sortie d’une extension de macro. Si un defined
opérateur apparaît comme le résultat d’une extension de macro, la norme C spécifie le comportement comme non défini. L’avertissement C5105 est un avertissement de portabilité et de conformité aux normes, émis car d’autres compilateurs conformes peuvent avoir un comportement différent. Pour résoudre ce problème, déplacez l’opérateur defined
hors de la macro ou supprimez l’avertissement C5105.
Comportement spécifique à Microsoft : le compilateur MSVC évalue normalement l’opérateur defined
, même sous /permissive-
.
Cet avertissement est nouveau dans Visual Studio 2017 version 15.8. Elle est générée uniquement par le nouveau préprocesseur conforme aux normes, spécifié par l’option du /experimental:preprocessor
compilateur.
Pour désactiver l’avertissement sans modification du code
Vous pouvez désactiver l’avertissement pour une ligne de code spécifique à l’aide du pragma d’avertissement. #pragma warning(suppress : 5105)
Vous pouvez également désactiver l’avertissement dans un fichier à l’aide du pragma #pragma warning(disable : 5105)
d’avertissement. Vous pouvez désactiver l’avertissement globalement dans les builds de ligne de commande à l’aide de l’option de ligne de commande /wd5105 .
Pour désactiver l’avertissement d’un projet entier dans l’IDE Visual Studio :
- Ouvrez le dialogue Pages de propriétés du projet. Pour plus d’informations sur l’utilisation de la boîte de dialogue Pages de propriétés, consultez Pages de propriétés.
- Sélectionnez la page Propriétés>de configuration C/C++>Avancé.
- Modifiez la propriété Désactiver les avertissements spécifiques pour ajouter
5105
. Choisissez OK pour appliquer vos modifications.
Exemple
Cet exemple de programme montre comment générer l’avertissement C5105 et comment le corriger.
// C5105.cpp
// To demonstrate the warning,
// compile by using: cl /EHsc /experimental:preprocessor /DTEST C5105.cpp
// To fix the warning, change the DEFINED_TEST
// definition to the commented version.
#include <iostream>
#define DEFINED_TEST defined TEST
//#if defined TEST
//#define DEFINED_TEST 1
//#else
//#define DEFINED_TEST 0
//#endif
int main()
{
#if DEFINED_TEST // C5105
std::cout << "TEST defined\n";
#else
std::cout << "TEST not defined\n";
#endif
}