16

我最近在 make GCC 编译选项中添加了-pedantic-pedantic-errors以帮助清理我的跨平台代码。一切都很好,直到它在外部包含的头文件中发现错误。有没有办法在外部头文件中关闭这个错误检查,即:

继续检查包含的文件,如下所示:

#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
4

5 回答 5

34

使用-Wsystem-headers选项,GCC 将打印与系统头相关的警告消息,这些消息通常被抑制。但是,您希望 GCC 基本上将这些文件视为系统头文件,因此您可以尝试传递“-isystem /usr/local/ffmpeg”(或您安装该软件包的任何位置)以使 GCC 忽略包含在这些目录也是如此。

于 2008-10-05T19:49:06.833 回答
1

我不知道如何告诉 GCC 停止发出这些警告。llvm-gcc但是,您可以使用(或只是 gcc)之类的东西粗暴地删除第三方警告-pedantic 2>&1|grep -v "/usr/"

于 2009-04-17T16:33:35.360 回答
0

我想到的一个想法(我不知道是否有一个“开箱即用”的参数):

准备一个将获取编译器输出的脚本,并删除所有包含不在特定列表中的标题的行(您的标题)。

这样做应该不难。

于 2008-10-05T19:40:55.150 回答
-2

你现在不能告诉 GCC 对某些标题而不是其他标题迂腐。您可能会建议它作为一个功能,尽管我怀疑它会被抵制,因为理想情况下每个人都会迂腐。

您可以自己修复头文件,生成补丁,然后在升级库时将该补丁应用于更高版本的头文件。

也将补丁提交给 FFmpeg,希望他们会采用它,但无论哪种方式,即使他们不接受它,你也会被覆盖。

于 2009-04-17T16:44:56.333 回答
-4

您可以修复标题并向FFmpeg提交补丁;兼容性-pedantic是一个有价值的目标,所以我相信他们会考虑它,特别是如果它只涉及删除尾随逗号等。

于 2008-10-05T19:53:27.653 回答