2

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

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

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

cl /Wall /wd4668 /wd4820

仍然给你留下C4255

C:\SDKs\Windows\v7.0A\include\windef.h(230) : warning C4255: 'FARPROC'
C:\SDKs\Windows\v7.0A\include\windef.h(231) : warning C4255: 'NEARPROC'
C:\SDKs\Windows\v7.0A\include\windef.h(232) : warning C4255: 'PROC'

所以你也添加了:

cl /Wall /wd4668 /wd4820 /wd4255

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

有没有办法让编译器将不同的设置应用于标准头文件而不是我自己的代码?

更新

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

4

1 回答 1

3

不幸的是,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

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

于 2011-07-19T22:47:17.983 回答