- 用于MS Visual Studio C ++编译器的系统

时间:2009-11-16 12:14:10

标签: visual-studio gcc clang warnings static-analysis

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

BTW:isystem应该是这个问题的标签,但我不被允许这样做..

摘要:我希望从我的代码中看到所有警告,并且从外部代码中看到 no 警告。

4 个答案:

答案 0 :(得分:6)

截至2017-08-17,这似乎仍然不可能。

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

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

更新2018年:

此问题现已关闭,已在固定状态下提供,并且可在标准MS VS安装[source]中使用。 MS团队的博客文章介绍了新功能[here]。

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

最后警告也可以在MS VS平台上使用。

答案 1 :(得分:1)

不,MSVC没有等效的-isystem


查看cl /的输出输出? :

  

/ wd禁用警告n

     

/我们将警告n视为错误

     

/ wo发出警告n一次

     

/ w为n

设置警告级别1-4

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

编辑作者编辑了他的问题,更新了答案:无法使用编译器标志在没有警告的情况下使用警告和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

答案 2 :(得分:1)

答案 3 :(得分:1)

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