MSVC - 停止标题中的警告

Posted

技术标签:

【中文标题】MSVC - 停止标题中的警告【英文标题】:MSVC - stop warnings in headers 【发布时间】:2010-11-27 15:26:05 【问题描述】:

我正在将 MSVC 与 CMaked 项目一起使用。结果,我在 MSVC 上启用了许多为 gcc 和 clang 启用的标志。但是,/Wall 警告级别让我有些痛苦;它会警告我包含的标头中的各种内容,例如 stdio.h 和 boost 标头。有没有办法阻止 MSVC 警告我标题中的内容?我喜欢我的警告级别,但我只想为我启用它们。

【问题讨论】:

What's up with the thousands of warnings in standard headers in MSVC -Wall?的可能重复 投票给visualstudio.uservoice.com/forums/121579-visual-studio-ide/… 【参考方案1】:

/Wall非常迂腐。 /W4 可能是您真正需要的。要回答您的问题,您可以禁用标题周围的特定警告:

 #pragma warning(disable:xxxx)
 #include <yourheader.h>
 #pragma warning(default:xxxx)

或更改警告级别:

 #pragma warning(push,3)
 #include <yourheader.h>
 #pragma warning(pop)

请参阅 MSDN 文档:http://msdn.microsoft.com/en-us/library/2c8f766e.aspx

【讨论】:

所以没有办法告诉 MSVC 不要在我无法控制的标头中发出警告? (即尖括号中包含的所有标题,而不是双引号) 不,没有。此外,对于某些模板,您不仅需要禁用标头周围的警告,还要禁用实例化它们的位置(但也许这只是旧版本的问题......我不太确定,sry)。使用预编译头文件时要格外小心:您也需要禁用那里的所有内容。【参考方案2】:

您可以使用/wdXXXX 标志禁用特定警告,其中XXXX 是您希望忽略的警告数量。无需修改代码。

【讨论】:

【参考方案3】:

Mark Tolonen 已经指出/W4

如果仍然产生警告,例如您使用的是较旧的 MSVC 版本(如 7.1),或者您使用的某些第 3 方库仍会产生关于完美代码的警告,并且您的目标是 clean compiles,然后查看我的 @987654321 @标头。

它已经在 comp.lang.c++ Usenet 组中通过了几轮社区审查,但它可能/将需要更新,因为微软在新的编译器版本中添加了更多愚蠢的警告......;-)

【讨论】:

我特别喜欢 VC++10 中的新警告“警告:数组的元素将被默认初始化”,好像有什么问题一样:/

以上是关于MSVC - 停止标题中的警告的主要内容,如果未能解决你的问题,请参考以下文章

MSVC++ 警告标志

在 Qt Creator 中禁用编译器警告项目范围(使用 MSVC 时)

如何避免 MSVC 警告 C4701:可能未初始化的局部变量

在MSVC ++ 2010中禁用警告

提升 microsec_time_clock.hpp 警告 C4244

msvc/gcc:中用#pragma指令关闭特定警告(warning)