Comment ignorer les erreurs pédantes du compilateur gcc dans les en-têtes de bibliothèques externes?

StackOverflow https://stackoverflow.com/questions/172484

Question

J'ai récemment ajouté les options -pedantic et -pedantic-errors à mes options de compilation make gcc pour faciliter le nettoyage de mon code multi-plateforme. Tout allait bien jusqu'à ce qu'il trouve des erreurs dans les fichiers d'en-tête inclus externes. Existe-t-il un moyen de désactiver cette vérification d'erreur dans les fichiers d'en-tête externes, par exemple:

Continuez à rechercher les fichiers inclus comme ceci:

#include "myheader.h"

Arrêtez de rechercher des fichiers d'inclusion comme ceci:

#include <externalheader.h>

Voici les erreurs que je reçois:

g++ -Wall -Wextra -Wno-long-long -Wno-unused-parameter -pedantic --pedantic-errors
-O3 -D_FILE_OFFSET_BITS=64 -DMINGW -I"freetype/include" -I"jpeg" -I"lpng128" -I"zlib"
-I"mysql/include" -I"ffmpeg/libswscale" -I"ffmpeg/libavformat" -I"ffmpeg/libavcodec"
-I"ffmpeg/libavutil" -o omingwd/kguimovie.o -c kguimovie.cpp

In file included from ffmpeg/libavutil/avutil.h:41,
             from ffmpeg/libavcodec/avcodec.h:30,
             from kguimovie.cpp:44:
ffmpeg/libavutil/mathematics.h:32: error: comma at end of enumerator list
In file included from ffmpeg/libavcodec/avcodec.h:30,
             from kguimovie.cpp:44:
ffmpeg/libavutil/avutil.h:110: error: comma at end of enumerator list
In file included from kguimovie.cpp:44:
ffmpeg/libavcodec/avcodec.h:277: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:303: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:334: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:345: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:2249: warning: `ImgReSampleContext' is deprecated
(declared at ffmpeg/libavcodec/avcodec.h:2243)
ffmpeg/libavcodec/avcodec.h:2259: warning: `ImgReSampleContext' is deprecated
(declared at ffmpeg/libavcodec/avcodec.h:2243)
In file included from kguimovie.cpp:45:
ffmpeg/libavformat/avformat.h:262: error: comma at end of enumerator list
In file included from ffmpeg/libavformat/rtsp.h:26,
             from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtspcodes.h:38: error: comma at end of enumerator list
In file included from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtsp.h:32: error: comma at end of enumerator list
ffmpeg/libavformat/rtsp.h:69: error: comma at end of enumerator list
Était-ce utile?

La solution

Vous pouvez réparer les en-têtes et soumettre un correctif à ffmpeg; la compatibilité avec -pedantic est un objectif louable, alors je suis sûr qu'ils l'envisageraient, surtout s'il s'agissait simplement de supprimer les virgules de fin, etc.

Autres conseils

L'utilisation de l'option -Wsystem-headers avec gcc imprimera des messages d'avertissement associés aux en-têtes système, qui sont normalement supprimés. Cependant, vous souhaitez que gcc traite en principe ces fichiers comme des en-têtes système. Vous pouvez donc essayer de passer le mot-clé "-isystem / usr / local / ffmpeg". (ou où que vous installiez ce paquet) pour que gcc ignore également les erreurs des fichiers inclus dans ces répertoires.

Je ne connais aucun moyen de dire à gcc de cesser d'émettre ces avertissements. Cependant, vous pouvez supprimer discrètement les avertissements de tiers avec quelque chose comme llvm-gcc (ou simplement gcc) -pedantic 2 > & amp; 1 | grep -v "/ usr /

Une idée me vient à l’esprit (je ne sais pas s’il existe un paramètre «immédiat» pour cela):

Préparez un script qui extraira la sortie de votre compilateur et supprimez toutes les lignes contenant des en-têtes ne figurant pas dans une liste spécifique ( vos en-têtes).

Cela ne devrait pas être si difficile de le faire de cette façon.

Vous ne pouvez pas dire à GCC d’être pédant sur certaines en-têtes et pas sur d’autres pour le moment. Vous pourriez en parler comme une fonctionnalité, même si je pense que cela résistera, car idéalement tout le monde serait pédant.

Ce que vous pouvez faire, c'est réparer les en-têtes vous-même, générer un correctif, puis appliquer ce correctif aux versions ultérieures des en-têtes si vous mettez à niveau la bibliothèque.

Soumettez le correctif à ffmpeg également dans l’espoir de l’adopter, mais dans les deux cas, vous êtes couvert même s’ils ne l’acceptent pas.

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