我通常喜欢在编程时启用很多警告。但是,某些库包含容易引起警告的代码(..、python、Qt、..)。使用 gcc 编译时,我可以使用 -isystem 而不是 -I 来使其静音。如何使用 MS 编译器做同样的事情?我知道警告#pragma,但我想要一个不涉及编译器特定代码的解决方案。我也知道我可以关闭特定的警告,但这也不是我想要的。
顺便说一句:isystem 应该是这个问题的标签,但我不被允许这样做..
摘要:我想查看我的代码中的所有警告,并且没有来自外部代码的警告。
我通常喜欢在编程时启用很多警告。但是,某些库包含容易引起警告的代码(..、python、Qt、..)。使用 gcc 编译时,我可以使用 -isystem 而不是 -I 来使其静音。如何使用 MS 编译器做同样的事情?我知道警告#pragma,但我想要一个不涉及编译器特定代码的解决方案。我也知道我可以关闭特定的警告,但这也不是我想要的。
顺便说一句:isystem 应该是这个问题的标签,但我不被允许这样做..
摘要:我想查看我的代码中的所有警告,并且没有来自外部代码的警告。
这现在存在于/experimental:external /external:I system_include_path /external:W0
. 有关更多详细信息,请参阅https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/ 。
不,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
不知道为什么 MS 从未选择过这个。我们只能尝试在https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-上投票s