Lors du développement d'une application C++, j'ai dû utiliser une bibliothèque tierce qui a produit une énorme quantité d'avertissements liés à l'utilisation d'une directive #pragma inoffensive.
../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
from ../File3.hpp:57,
from File4.h:49,
Est-il possible de désactiver ce type d'avertissements, lors de l'utilisation du compilateur C GNU C++?
Je pense que vous pouvez compiler avec
-Wno-unknown-pragmas
pour les supprimer.
Dans GCC, compilez avec -Wno-unknown-pragmas
Dans MS Visual Studio 2005 (cette question n'est pas balisée avec gcc, j'ajoute donc ceci pour référence), vous pouvez désactiver globalement dans Paramètres du projet-> C/C++ -> Avancé. Entrez 4068 dans "Désactiver les avertissements spécifiques"
ou vous pouvez l'ajouter à n'importe quel fichier pour désactiver les avertissements localement
#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */
Voir peut-être GCC Diagnostic Pragmas ? Dans ce cas, vous pouvez également utiliser la combinaison d'options que -Wall
active, à l'exclusion de -Wunknown-pragmas
.
Merci à tous pour l'astuce. Dans mon cas, je travaille avec Qt Mingw. Je dois définir le drapeau d'une autre manière, dans mon fichier .PRO:
QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas
Je sais que la question concerne GCC, mais pour les personnes qui souhaitent le faire de manière aussi portable que possible:
La plupart des compilateurs qui peuvent émettre cet avertissement ont un moyen de désactiver l'avertissement à partir de la ligne de commande (exception: PGI) ou du code (exception: DMC):
-Wno-unknown-pragmas
/#pragma GCC diagnostic ignored "-Wunknown-pragmas"
-Wno-unknown-pragmas
/#pragma clang diagnostic ignored "-Wunknown-pragmas"
-diag-disable 161
/#pragma warning(disable:161)
#pragma diag_suppress 1675
-wd4068
/#pragma warning(disable:4068)
--diag_suppress,-pds=163
/#pragma diag_suppress 163
--diag_suppress Pe161
/#pragma diag_suppress=Pe161
-w17
Vous pouvez combiner la plupart de cela en une seule macro à utiliser dans votre code, ce que j'ai fait pour la macro HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
dans Hedley :
#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#Elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#Elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#Elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#Elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#Elif HEDLEY_TI_VERSION_CHECK(8,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#Elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif
Notez que Hedley peut avoir des informations plus complètes que cette réponse car j'oublierai probablement de mettre à jour cette réponse, donc si vous ne voulez pas simplement utiliser Hedley (c'est un seul en-tête C/C++ du domaine public, vous pouvez facilement le déposer dans votre projet ), vous pouvez utiliser Hedley comme guide au lieu des informations ci-dessus.
Les vérifications de version sont probablement trop pessimistes, mais il est parfois difficile d'obtenir de bonnes informations sur les versions obsolètes des compilateurs propriétaires, et je préfère être prudent que désolé. Encore une fois, les informations de Hedley peuvent être meilleures.
De nombreux compilateurs peuvent également envoyer des avertissements push/pop sur une pile, vous pouvez donc pousser, puis les désactiver avant d'inclure du code que vous ne contrôlez pas, puis pop donc votre , le code déclenchera toujours l'avertissement en question (afin que vous puissiez le nettoyer). Il existe également des macros pour cela dans Hedley: HEDLEY_DIAGNOSTIC_Push
/ HEDLEY_DIAGNOSTIC_POP
.