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

时间:2011-07-19 22:39:10

标签: c visual-c++ warnings cl.exe

运行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

但其他人可能会突然出现。我可能希望为我自己的代码保留这些警告,只是没有输出因为我的代码中没有出现的警告而混乱。

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

更新

嗯,有一个similar question,答案是与/W4而不是/Wall一起使用。也许MSVC无法为不同的文件指定不同的设置。

1 个答案:

答案 0 :(得分: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

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