Как игнорировать педантичные ошибки компилятора gcc во внешних заголовках библиотеки? - PullRequest
14 голосов
/ 05 октября 2008

Я недавно добавил -pedantic и -pedantic-errors в параметры компиляции make gcc, чтобы помочь очистить мой кроссплатформенный код. Все было хорошо, пока он не находит ошибки во внешних включенных заголовочных файлах. Есть ли способ отключить эту проверку ошибок во внешних заголовочных файлах IE:

Продолжайте проверять наличие включенных файлов следующим образом:

#include "myheader.h"

Прекратить проверку включаемых файлов, например:

#include <externalheader.h>

Вот ошибки, которые я получаю:

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

Ответы [ 5 ]

32 голосов
/ 05 октября 2008

Использование опции -Wsystem-headers с gcc выведет предупреждающие сообщения, связанные с системными заголовками, которые обычно подавляются. Однако вы хотите, чтобы gcc в основном рассматривал эти файлы как системные заголовки, поэтому вы можете попробовать передать «-isystem / usr / local / ffmpeg» (или где бы вы ни установили этот пакет), чтобы gcc игнорировал ошибки файлов, включенных в эти каталоги также.

1 голос
/ 17 апреля 2009

Я не знаю, как сказать gcc, чтобы они перестали выдавать эти предупреждения. Однако вы можете хакерски удалить сторонние предупреждения с помощью что-то вроде llvm-gcc (или просто gcc) -pedantic 2> & 1 | grep -v "/ usr /"

0 голосов
/ 17 апреля 2009

Вы не можете сказать GCC быть педантичным в отношении некоторых заголовков, а не других в это время. Вы могли бы предложить это как особенность, хотя я подозреваю, что этому будет сопротивляться, поскольку в идеале все будут педантичны.

Что вы можете сделать, это самостоятельно исправить заголовки, сгенерировать патч и затем применить этот патч к более поздним версиям заголовков, если вы обновите библиотеку.

Отправьте патч в ffmpeg также в надежде, что они примут его, но в любом случае вы защищены, даже если они его не примут.

0 голосов
/ 05 октября 2008

Вы можете исправить заголовки и отправить патч для ffmpeg; совместимость с -pedantic является достойной целью, поэтому я уверен, что они это учтут, особенно если это просто связано с удалением запятых и т.

0 голосов
/ 05 октября 2008

Одна идея, которая приходит мне в голову (не знаю, есть ли для этого параметр «из коробки»):

Подготовьте скрипт, который будет принимать выходные данные вашего компилятора, и удалите все строки, содержащие заголовки, которых нет в определенном списке ( ваши заголовки).

Не должно быть так сложно делать это таким образом.

...