11

我通常喜欢在编程时启用很多警告。但是,某些库包含容易引起警告的代码(..、python、Qt、..)。使用 gcc 编译时,我可以使用 -isystem 而不是 -I 来使其静音。如何使用 MS 编译器做同样的事情?我知道警告#pragma,但我想要一个不涉及编译器特定代码的解决方案。我也知道我可以关闭特定的警告,但这也不是我想要的。

顺便说一句:isystem 应该是这个问题的标签,但我不被允许这样做..

摘要:我想查看我的代码中的所有警告,并且没有来自外部代码的警告。

4

4 回答 4

11

截至 2017 年 8 月 17 日,这似乎仍然是不可能的。

我在这里添加了一个功能请求:

https://developercommunity.visualstudio.com/content/problem/96411/impossible-to-ignore-warnings-from-system-librarie.html

2018 年更新:

该问题现在已解决,可在标准 MS VS 安装 [] 中使用。MS 团队的一篇博文介绍了新功能 [此处]。

MS 的解决方案非常灵活。您不仅可以像使用 那样使用路径来区分--isystem,还可以通过是否使用#include ""or来区分#include <>。该博客文章值得一读,以了解所有各种自定义点。

于 2017-08-18T15:29:25.377 回答
3

这现在存在于/experimental:external /external:I system_include_path /external:W0. 有关更多详细信息,请参阅https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/ 。

于 2018-04-20T13:18:03.870 回答
1

不,MSVC 没有-isystem等价物。


查看 cl /? 的输出输出 :

/wd 禁用警告 n

/we 将警告 n 视为错误

/wo 发出警告 n 一次

/w 为 n 设置警告级别 1-4

请注意,这会禁用整个项目的警告;我记得在使用 Qt 时,我宁愿更改它的主标题,并在最后禁用 #pragma 警告并再次启用,这样我仍然可以看到我自己的源的所有警告。

编辑作者编辑了他的问题,更新了答案:没有办法让你的代码带有警告和 Qt 代码没有警告使用编译器标志:你将如何告诉编译器什么是“你的”代码?

请注意,上述标志也可以在文件级别应用,因此这将允许您仅对包含 Qt 标头的那些文件禁用警告,但这仍然意味着您无法在该文件中看到您自己的代码的警告。

所以我坚持上面的答案;它不是很漂亮,但我很确定这是唯一的方法:在 Qt 标头的开头和结尾使用#pragma。要么更改 Qt 标头(甚至更难看),要么选择一种侵入性较小的方式,如下所示:

//your source/header file
#include "shutuppqt.h"
#include <QString>
#include "enableallwarnings.h"

例如“shutuppqt.h”

#ifdef MSVC
  #pragma warning ( disable : 4222 ) //or whatever warning Qt emits
#else
  //....
#endif

例如“enableallwarnings.h”

#ifdef MSVC
  #pragma warning ( enable : 4222 ) //or default instead of enable
#else
  //....
#endif
于 2009-11-16T12:51:37.217 回答
1

不知道为什么 MS 从未选择过这个。我们只能尝试在https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-上投票s

于 2016-06-24T14:40:57.823 回答