Comment désactiver les avertissements #pragma?

Lors du développement d’une application C ++, j’ai dû utiliser une bibliothèque tierce qui produisait une quantité énorme 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 GNU C ++?

Je crois que vous pouvez comstackr avec

 -Wno-unknown-pragmas 

pour les supprimer.

Dans GCC, comstackr avec -Wno-unknown-pragmas

Dans MS Visual Studio 2005 (cette question n’est pas balisée avec gcc, donc j’ajoute 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’append à n’importe quel fichier pour désactiver les avertissements localement

 #pragma warning (disable : 4068 ) /* disable unknown pragma warnings */ 

Peut-être voir Pragmas Diagnostic GCC ? Dans ce cas, vous pouvez également utiliser la combinaison d’options que -Wall active, à l’exception de -Wunknown-pragmas .

Merci à tous pour le conseil. Dans mon cas, je travaille avec Qt Mingw. Je dois définir un autre drapeau, dans mon fichier .PRO:

 QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas 

Je sais que la question concerne GCC, mais pour ceux qui veulent faire cela aussi facilement 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):

  • GCC: -Wno-unknown-pragmas / #pragma GCC diagnostic ignored "-Wunknown-pragmas"
  • clang: -Wno-unknown-pragmas / #pragma clang diagnostic ignored "-Wunknown-pragmas"
  • Compilateur Intel C / C ++: -diag-disable 161 / #pragma warning(disable:161)
  • IGP: #pragma diag_suppress 1675
  • -wd4068 : #pragma warning(disable:4068) -wd4068 / #pragma warning(disable:4068)
  • TI: --diag_suppress,-pds=163 / #pragma diag_suppress 163
  • IAR C / C ++ Comstackr: --diag_suppress Pe161 / #pragma diag_suppress=Pe161
  • Compilateur numérique Mars C / C ++: -w17

Vous pouvez combiner la plupart de ces éléments dans 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 utiliser Hedley (c’est un en-tête C / C ++ du domaine public unique) ) 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 pousser / pop des avertissements sur une stack, afin de pouvoir les pousser, puis les désactiver avant d’inclure du code que vous ne contrôlez pas, puis pop pour que votre code déclenche toujours l’avertissement en question. Il existe également des macros dans Hedley: HEDLEY_DIAGNOSTIC_PUSH / HEDLEY_DIAGNOSTIC_POP .