无法禁用由 Boost 库引起的警告

Cannot disable warnings caused by the Boost Library

我正在尝试消除项目中的警告,这样我就可以打开将警告视为错误的标志。该项目使用 boost 库,特别是 Concept_check.hpp 和 cuthill_mckee_ordering.hpp 文件。警告 4510 和 4610 显示在 concept_check.hpp 文件中,我尝试使用 #pragma warning push and pop 禁用它们。这些警告是由于 boost 库在没有为它编写构造函数时尝试使用 concept_check.cpp 中找到的模板实例化 class 引起的。

我的问题是:有没有更可靠的方法可以在不修改增强代码的情况下禁用这些警告?我正在使用 Visual studio 2010。

也许你看错了方向。正如 Alan Stokes 指出的那样,警告是有原因的。我有三个提示,可能不是您期望的答案,但可能会带来 可接受的 解决方案:

  1. 不是消除警告,而是修复错误。我不知道你的代码,但 other people 有类似的问题,可以通过 声明 一个变量来解决。

  2. 另一个问题是:为什么要把你所有的警告都变成错误?真的有必要吗?我同意正常代码应该始终在没有警告的情况下编译。但这些警告并非源自您自己的代码。考虑一个 static code-checker,它会警告您编译器所忽略的问题。

  3. 如果您必须使用-WX,请将有问题的代码移到静态代码中object/library/module,这样您就不会为仅当您需要重新编译此模块时才发出警告。您可以为此模块使用特定的编译选项,以完全消除警告。


还有另一种可能性,但我无法检查它是否真的有效。据Microsoft Documentation it is possible to set the warning level of specific warnings. (there are similar options for GCC)。首先,将所有警告切换为错误:

/WX

然后,将两个违规警告的警告级别设置为零:

/W04510 /W04610

完整的命令行如下所示:

cl source.cpp /WX /W04510 /W04610

最好的解决方案是将其与上面的提示 3 结合起来。这样,特定的编译器选项仅用于导致警告的文件。

也许 these 解决方案有效。

您可以禁用 .h 文件中的特定警告 (#pragma warning( disable: ... )。