Visual C++ #pragma 警告

Visual C++ #pragma warning

我有以下三个连续的警告:

Warning C4068 unknown pragma ...\microsoft visual studio 14.0\vc\include\comutil.h  53
... 54
... 54

相关行是:

#pragma warning(push)
#pragma warning(disable: 4290)
#pragma warning(disable: 4310)

平台工具集是通常的 v140,目标平台版本是 8.1。警告级别为W3。

我阅读了当前的#pragma 警告文档。

据我了解,第一行保存了警告设置的当前状态。
以下两行禁用前面代码的警告 4290 4310,直到 #pragma warning(pop) 恢复以前保存的状态。

为什么 #pragma warning 显示为未知?

在我设置的项目的属性页中

C/C++ -> Preprocess to a file -> Yes (/P)

我重建了项目,它为每个 C++ 文件生成了一个带有 *.i 文件的调试目录,其中包含所有展开的宏(参见 here)。
这些文件非常大,但它们还包含有用的 #line 指令,显示编译器何时访问和退出头文件。所以我 grepped 用于引发错误的头文件的名称,我能够检测到 #pragma warning(push) 中的 warning 也被扩展了,这导致了未找到警告。

因为我已经包含了一些来自第三方 GNU 项目的头文件(其中没有定义这种类型的 #pragma),所以找到提高编译器的 #define warning 宏相对简单警告。