16 Stimmen

Wie kann ich die GCC Compiler 'pedantic' Fehler in externen Bibliotheksheadern ignorieren?

Ich habe kürzlich -pedantic und -pedantic-errors meinen GCC-Kompilierungsoptionen hinzugefügt, um meinen plattformübergreifenden Code zu bereinigen. Alles war in Ordnung, bis es Fehler in extern eingebundenen Headerdateien fand. Gibt es eine Möglichkeit, diese Fehlerprüfung in externen Headerdateien zu deaktivieren, d.h.:

Überprüfung beibehalten für Dateien, die so inkludiert sind:

#include "myheader.h"

Keine Überprüfung mehr für Include-Dateien wie diese:

#include 

Hier sind die Fehlermeldungen, die ich erhalte:

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: Fehler: Komma am Ende der Aufzählungsliste
In file included from ffmpeg/libavcodec/avcodec.h:30,
             from kguimovie.cpp:44:
ffmpeg/libavutil/avutil.h:110: Fehler: Komma am Ende der Aufzählungsliste
In file included from kguimovie.cpp:44:
ffmpeg/libavcodec/avcodec.h:277: Fehler: Komma am Ende der Aufzählungsliste
ffmpeg/libavcodec/avcodec.h:303: Fehler: Komma am Ende der Aufzählungsliste
ffmpeg/libavcodec/avcodec.h:334: Fehler: Komma am Ende der Aufzählungsliste
ffmpeg/libavcodec/avcodec.h:345: Fehler: Komma am Ende der Aufzählungsliste
ffmpeg/libavcodec/avcodec.h:2249: Warnung: `ImgReSampleContext' ist veraltet
(deklariert in ffmpeg/libavcodec/avcodec.h:2243)
ffmpeg/libavcodec/avcodec.h:2259: Warnung: `ImgReSampleContext' ist veraltet
(deklariert in ffmpeg/libavcodec/avcodec.h:2243)
In file included from kguimovie.cpp:45:
ffmpeg/libavformat/avformat.h:262: Fehler: Komma am Ende der Aufzählungsliste
In file included from ffmpeg/libavformat/rtsp.h:26,
             from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtspcodes.h:38: Fehler: Komma am Ende der Aufzählungsliste
In file included from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtsp.h:32: Fehler: Komma am Ende der Aufzählungsliste
ffmpeg/libavformat/rtsp.h:69: Fehler: Komma am Ende der Aufzählungsliste

34voto

Nik Reiman Punkte 37385

Mit der Option -Wsystem-headers wird GCC Warnmeldungen zu System-Headern ausgeben, die normalerweise unterdrückt werden. Wenn Sie jedoch möchten, dass GCC diese Dateien im Grunde genommen als System-Header behandelt, könnten Sie versuchen, "-isystem /usr/local/ffmpeg" (oder wo immer Sie das Paket installiert haben) zu übergeben, um GCC dazu zu bringen, Fehler aus den in diese Verzeichnisse eingeschlossenen Dateien zu ignorieren.

1voto

Good Person Punkte 1427

Ich kenne keine Möglichkeit, GCC zu stoppen, diese Warnungen auszugeben. Sie könnten jedoch hackisch Drittanbieterwarnungen mit etwas wie llvm-gcc (oder einfach gcc) -pedantic 2>&1|grep -v "/usr/" entfernen.

0voto

friol Punkte 6956

Eine Idee, die mir in den Sinn kommt (ich weiß nicht, ob es einen 'out of the box'-Parameter dafür gibt):

Erstellen Sie ein Skript, das die Ausgabe Ihres Compilers übernimmt und alle Zeilen entfernt, die Überschriften enthalten, die nicht in einer spezifischen Liste (Ihre Überschriften) stehen.

Es sollte nicht allzu schwierig sein, es auf diese Weise zu tun.

-2voto

Adam Davis Punkte 89506

Sie können derzeit GCC nicht dazu bringen, bei einigen Headern pedantisch zu sein und bei anderen nicht. Sie könnten es als Funktion vorschlagen, obwohl ich vermute, dass es widerstanden wird, da idealerweise alle pedantisch sein sollten.

Was Sie tun können, ist die Header selbst zu reparieren, einen Patch zu erstellen und dann diesen Patch auf spätere Versionen der Header anzuwenden, wenn Sie die Bibliothek aktualisieren.

Reichen Sie den Patch auch bei FFmpeg ein in der Hoffnung, dass sie ihn übernehmen, aber auf jeden Fall sind Sie abgesichert, auch wenn sie ihn nicht akzeptieren.

0 Stimmen

Ffmpeg Header sind gültig mit -pedantic -std=c99, was es zum Erstellen verwendet. Aber ich denke öffentliche Header sollten auch gültig sein, egal was-extern-"C" ist...

-4voto

Sie könnten die Header reparieren und einen Patch an FFmpeg senden; die Kompatibilität mit -pedantic ist ein lohnenswertes Ziel, also bin ich sicher, dass sie es in Betracht ziehen würden, besonders wenn es nur darum geht, abschließende Kommas und ähnliches zu entfernen.

11 Stimmen

Dies beantwortet die Frage eigentlich nicht.

1 Stimmen

@KPexEA: Bitte ziehen Sie in Betracht, das Akzeptieren der offensichtlich besseren Antwort neu zuzuweisen - damit die Suchergebnisse von SO und die menschlichen Leser die Antwort leicht erkennen können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X