代码之家  ›  专栏  ›  技术社区  ›  Daniel Bonetti

如何抑制内部Visual Studio文件中的警告

  •  8
  • Daniel Bonetti  · 技术社区  · 11 年前

    我在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" "string.h" 我继续收到有关 string.h 等等

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

    2 回复  |  直到 10 年前
        1
  •  8
  •   Cody Gray BugGuyBCS    11 年前

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

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

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

    Warning C4514 是出了名的 无用的 一个,实际上只是在全球范围内大声疾呼要被压制。它是一个完全不可操作的项目,描述了您在使用库时的预期情况。

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

    正如链接的文档所说,这些都是“信息性警告”,默认情况下是禁用的。这很好,只是我和你一样,更喜欢用“所有警告”编译我的代码( /Wall )启用,这些只会增加噪音。所以我单独把它们关掉。

    您可以通过在VS IDE中向项目的属性添加禁止显示来禁用这些警告,也可以在代码文件的顶部(例如,在预编译的头中)使用pragma指令:

    #pragma warning(disable: 4514 4711)
    
        2
  •  7
  •   blessio    11 年前

    也许这会奏效:

    // 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环境,那么您可能希望将所有使用的外部头封装在特定的头中,以便在移植时可以对其进行更改。