为了账号安全,请及时绑定邮箱和手机立即绑定

如何从库头中隐藏GCC警告?

/ 猿问

如何从库头中隐藏GCC警告?

临摹微笑 2019-10-08 09:45:15

我有一个使用log4cxx,boost等库的项目,其标头会生成很多(重复)警告。有没有一种方法可以抑制来自库包含(例如#include <some-header.h>)或来自某些路径的包含的警告?我想在项目代码上照常使用-Wall和/或-Wextra,而不会模糊相关信息。我目前在make输出上使用grep,但是我想要更好的东西。



查看完整描述

3 回答

?
哈士奇WWW

对于使用CMake的用户,您可以修改include_directories指令以包括SYSTEM禁止显示此类标题警告的符号。


include_directories(SYSTEM "${LIB_DIR}/Include")

                               ^^^^^^


查看完整回答
反对 回复 2019-10-08
?
芜湖不芜

您可以使用编译指示。例如:


// save diagnostic state

#pragma GCC diagnostic push 


// turn off the specific warning. Can also use "-Wall"

#pragma GCC diagnostic ignored "-Wunused-but-set-variable"


#include <boost/uuid/uuid.hpp>

#include <boost/uuid/uuid_generators.hpp>

#include <boost/uuid/uuid_io.hpp>

#include <boost/lexical_cast.hpp>


// turn the warnings back on

#pragma GCC diagnostic pop


查看完整回答
反对 回复 2019-10-08
?
米琪卡哇伊

#pragma是对编译器的指令。您可以在#include之前设置某些内容,并在之后将其禁用。


您也可以在命令行中执行此操作。


另一个GCC页面专门关于禁用警告。


我会选择在源代码中使用#pragma,然后提供您为什么禁用警告的 合理原因(作为注释)。这意味着要对头文件进行推理。


GCC通过对警告类型进行分类来解决此问题。您可以将它们分类为警告或被忽略。先前链接的文章将向您显示可能禁用了哪些警告。


注意:您也可以使用属性按摩源代码以防止某些警告。但是,这使您与GCC紧密相关。


注意2:GCC还使用了Microsoft编译器中使用的pop / push接口 -Microsoft通过此接口禁用警告。我建议您对此进行进一步调查,因为我什至不知道是否有可能。


查看完整回答
反对 回复 2019-10-08

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信