visual c++ - Microsoft c编译器(cl.exe):可以限制每个文件(/Wall)的警告范围



运行cl.exe时,可指定告警级别。

cl /W3
cl /W4        # warn even more
cl /Wall      # all warnings on

然而,最高级别的/Wall似乎不切实际,因为它在Windows头文件中触发警告,例如在windef.h (VS2010的Windows SDK)中。最常出现的两个似乎是C4668和C4820。所以你可以关闭它们:

cl /Wall /wd4668 /wd4820

仍然留给你C4255:

C:SDKsWindowsv7.0Aincludewindef.h(230) : warning C4255: 'FARPROC'
C:SDKsWindowsv7.0Aincludewindef.h(231) : warning C4255: 'NEARPROC'
C:SDKsWindowsv7.0Aincludewindef.h(232) : warning C4255: 'PROC'

所以你要加上这个:

cl /Wall /wd4668 /wd4820 /wd4255

但是其他的可能会突然出现。我可能想为我自己的代码保留这些警告,只是不想让输出被不是来自我的代码的警告弄乱。

是否有办法使编译器应用不同的设置标准头比我自己的代码?

嗯,有一个类似的问题,答案是用/W4代替/Wall。也许MSVC不可能为不同的文件指定不同的设置

不幸的是,Visual Studio似乎没有一个选项来为在特定搜索路径中找到的所有头文件指定警告级别,也没有类似的选项来关闭警告。我自己只是坚持使用/W4,因为你正在描述的确切问题。

我能想到的解决这个问题的唯一方法是在所有包含违规头文件的文件中使用以下命令:

#pragma warning( push, 4 ) // Saves the current warning level and sets it to 4
#include <Windows.h>
#pragma warning( pop )     // Restores the old warning level
#include "MyHeader.h"      // Include other 'non-system' headers

请注意,我还没有实际尝试过,所以它可能根本不起作用!

最新更新