如何在使用g++编译时抑制某些文件的警告?

3
例如,我正在构建一个项目,其中包含多个*.cpp文件,我只需要从其中一些文件中抑制警告。 我使用Eclipse项目中使用的Makefile。
我该怎么做呢?
更新:
似乎可以使用诊断编译指示进行操作。

https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html


@BasileStarynkevitch 我使用在Eclipse项目中使用的Makefile。 - mrgloom
1
然后改进你的问题,使用一些 Makefile。但是为什么不能直接更正源代码呢?请编辑你的问题以改进 - Basile Starynkevitch
@BasileStarynkevitch 我想先仅纠正一些文件中的警告,然后再去处理其他有警告的文件。 - mrgloom
你可以用这种方法实现:https://dev59.com/bHNA5IYBdhLWcg3wbNQ4 - nos
顺便说一下,警告只是警告而已。它们不会停止编译器的执行(除非你使用 -Werror 参数)。 - Basile Starynkevitch
显示剩余3条评论
2个回答

8
如果您正在构建项目并使用编译器,那么取决于您的具体情况。我假设您正在使用Linux,并使用GCC。如果不是,请注意,类似的技术也适用于Visual Studio和其他编译器。
如果您有一个Makefile文件,您可以轻松修改它并为每个文件提供不同的编译器标志。禁用特定警告只需在构建行中添加“-Wno-”,例如:-Wno-unused-local-typedefs。
如果您无法轻松修改您的makefile文件,则可以将#pragma直接放入源代码中。例如,您可以在C++文件顶部添加以下行:
#pragma GCC diagnostic ignored "-Wno-unused-local-typedefs"

当然,真正的解决方法是修复警告。很少有警告不值得注意:通常忽略警告会在长期内带来更多痛苦!

2
当我在*.h文件中添加 #pragma GCC diagnostic ignored 时,它也会应用于包含此*.h文件的*.cpp文件中,这不是期望的行为,如何解决? - mrgloom

2

这将禁用所有警告,但我只需要禁用一些*.cpp文件中的警告。 - mrgloom
@mrgloom,请尝试我最新编辑中描述的技巧。很抱歉让你等了这么久。 - rubicks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接