Question

Lors du développement d’une application C ++, je devais 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 ++?

Était-ce utile?

La solution

Je crois que vous pouvez compiler avec

-Wno-unknown-pragmas

pour les supprimer.

Autres conseils

Dans GCC, compilez avec -Wno-unknown-pragmas

Dans MS Visual Studio 2005 (cette question n'est pas marquée avec gcc, je l'ajoute donc 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 */

Peut-être voir Pragmas de diagnostic GCC ? Sinon, dans ce cas, vous pouvez utiliser la combinaison d'options . que -Wall active, à l'exclusion de -Wunknown-pragmas .

Merci à tous pour le tuyau. 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 souhaitant le faire de la manière la plus portable possible:

La plupart des compilateurs pouvant émettre cet avertissement disposent d'un moyen de désactiver l'avertissement à partir de la ligne de commande (exception: PGI) ou en code (exception: DMC):

  • GCC: -pragmas non-inconnus / #pragma Diagnostic GCC ignoré "-Wunknown-pragmas"
  • clang: pragmas -wno-inconnus / #pragma diagnostic clang ignoré " -Wunknown-pragmas "
  • Compilateur Intel C / C ++: -diag-disable 161 / #pragma warning (disable: 161)
  • IGP: #pragma diag_suppress 1675
  • MSVC: -wd4068 / #pragma warning (disable: 4068)
  • TI: - diag_suppress, -pds = 163 / #pragma diag_suppress 163
  • Compilateur IAR C / C ++: - diag_suppress Pe161 / #pragma diag_suppress = Pe161
  • Compilateur numérique Mars C / C ++: -w17

Vous pouvez combiner la plupart de ces éléments en une seule macro à utiliser dans votre code. C’est ce que j’ai fait pour HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS macro 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. Si vous ne voulez pas utiliser Hedley (c'est un en-tête C / C ++ du domaine public, vous pouvez facilement le supprimer). 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 de compilateurs propriétaires, et je préfère être prudent que désolé. Encore une fois, les informations de Hedley pourraient être meilleures.

De nombreux compilateurs peuvent également appliquer des alertes sur une pile. Vous pouvez donc les désactiver, les désactiver avant d'inclure le code que vous ne contrôlez pas, puis les afficher afin que votre code déclenche toujours l'avertissement question (afin que vous puissiez le nettoyer). Il existe également des macros dans Hedley: HEDLEY_DIAGNOSTIC_PUSH / a> / HEDLEY_DIAGNOSTIC_POP . . p>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top