warning pragma

启用编译器警告消息的行为的选择性修改。

语法

#pragma warning(
warning-specifier : warning-number-list
 [;warning-specifier:warning-number-list ... ] )
#pragma warning( push [ n, ] )
#pragma warning( pop )

备注

以下警告说明符参数可用。

警告说明符 含义
1, 2, 3, 4 将给定级别应用于指定的警告。 也会启用默认情况下处于关闭状态的指定警告。
default 将警告行为重置为其默认值。 也会启用默认情况下处于关闭状态的指定警告。 警告将在其默认存档级别生成。

有关详细信息,请参阅默认关闭的编译器警告
disable 不发出指定的警告消息。
error 将指定警告报告为错误。
once 只显示指定消息一次。
suppress 将 pragma 的当前状态推送到堆栈上,禁用下一行的指定警告,然后弹出警告堆栈,从而重置 pragma 状态。

以下代码语句演示了 warning-number-list 参数可包含多个警告编号,并演示了可在同一 pragma 指令中指定多个 warning-specifier 参数。

#pragma warning( disable : 4507 34; once : 4385; error : 164 )

该指令在功能上等效于以下代码:

// Disable warning messages 4507 and 4034.
#pragma warning( disable : 4507 34 )

// Issue warning C4385 only once.
#pragma warning( once : 4385 )

// Report warning C4164 as an error.
#pragma warning( error : 164 )

编译器将 4000 添加到 0 和 999 之间的任何警告编号。

4700-4999 范围内的警告编号与代码生成关联。 对于这些警告,当编译器到达函数定义时有效的警告状态对函数的其余部分仍然有效。 在函数中使用 warningpragma 更改编号大于 4699 警告的状态,只会在函数末尾之后生效。 以下示例演示如何正确放置 warningpragma 来禁用代码生成警告消息然后还原该消息。

// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test() {
   int x;
   int y = x;   // no C4700 here
   #pragma warning(default:4700)   // C4700 enabled after Test ends
}

int main() {
   int x;
   int y = x;   // C4700
}

请注意,在整个函数体中,warningpragma 的最后一个设置将对整个函数有效。

推送和弹出

warningpragma 还支持以下语法,其中可选的 n 参数表示警告级别(1 到 4)。

#pragma warning( push [ , n ] )

#pragma warning( pop )

pragmawarning( push ) 存储每个警告的当前警告状态。 pragmawarning( push, n ) 存储每个警告的当前状态并将全局警告级别设置为 n

pragmawarning( pop ) 弹出推送到堆栈上的最后一个警告状态。 在 pushpop 之间对警告状态所做的任何更改都将被撤消。 请看以下示例:

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )

在此代码的末尾,pop 会将每个警告(包括 4705、4706 和 4707)的状态还原为其在代码开头的状态。

编写头文件时,可以使用 pushpop 来确保用户所做的警告状态更改不会阻止标头进行正确的编译。 请在标头的开头使用 push,并在标头的末尾使用 pop。 例如,你可能有一个标头未在警告级别 4 完全编译。 以下代码将警告级别更改为 3,然后在标头末尾还原原始警告级别。

#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )

有关帮助你禁止显示警告的编译器选项的详细信息,请参阅 /FI/w

另请参阅

Pragma 指令以及 __pragma_Pragma 关键字