8

我在 Visual Studio 2012 和这个简单的程序中将警告级别设置为 EnableAllWarnings (/Wall):

#include "math.h"

int main() {
    return 0;
}

当我编译时,我收到了几个警告,例如:

1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\math.h(161): warning C4514: 'hypot' : unreferenced inline function has been removed

如果我更换"math.h"to,"string.h"我会继续收到有关 the 等的警告string.h

有谁知道如何删除这些警告?

4

2 回答 2

8

仔细查看您实际收到的警告消息:

1> warning C4514: 'hypot' : unreferenced inline function has been removed

如果你对自己说“所以?!” ,那么这正是我的观点。

警告 C4514是出了名的无用,实际上只是在呼吁全球压制。这是一个完全不可操作的项目,并描述了您使用图书馆时的预期案例。

警告 C4711(已选择内联扩展的函数)是您将看到的另一个嘈杂警告。当然,只有在启用优化的情况下编译时才会得到这个,这可能就是你还没有看到它的原因。

就像链接文档所说的那样,这些是“信息警告”,默认情况下它们被禁用。这很好,除了我和你一样,更喜欢在/Wall启用“所有警告”()的情况下编译我的代码,而这些只会增加噪音。所以我将它们单独关闭。

您可以通过在 VS IDE 中将抑制添加到项目属性中来禁用这些警告,或者您可以在代码文件的顶部使用 pragma 指令(例如,在您的预编译头文件中):

#pragma warning(disable: 4514 4711)
于 2013-03-29T23:24:02.947 回答
7

也许这会成功:

// you can replace 3 with even lower warning level if needed 
#pragma warning(push, 3) 

#include <Windows.h>
#include <crtdbg.h>
#include "math.h"
//include all the headers who's warnings you do not want to see here

#pragma warning(pop)

如果您计划将代码移植到非 MS 环境,那么您可能希望将所有使用的外部标头包装在特定标头中,以便在移植时可以更改它。

于 2013-03-29T22:48:21.347 回答