为什么要在C ++中更改特定警告的警告级别?

时间:2011-10-31 12:46:27

标签: c++ visual-c++ compiler-construction compiler-warnings

Visual C ++功能#pragma warning除其他功能外,还允许更改特定警告的警告级别。假设警告X默认为4级,然后是

#pragma warning( 3, X )

从那时起它将达到3级。

我理解为什么我会暂时禁用警告,将警告变为错误或打开默认关闭的警告。但为什么我会更改警告级别?

我的意思是特定警告的警告级别与编译器“警告级别”选项/W一起工作,因此我目前无法想象我想要更改单个警告级别的设置发出或不发出警告取决于项目设置。

当我真的需要在C ++中更改特定警告的警告级别时,有哪些现实例子?

5 个答案:

答案 0 :(得分:4)

如果要在级别3或4上运行,但想要查看/不查看特定消息,可以更改其级别。当然,如果警告级别不是你想象的那样,那么pragma可能没有效果,但这就是pragma的生命。

答案 1 :(得分:4)

更容易获取您想要检测到的一个或两个4级警告并使用pragma将它们带到3级而不是使用/W4并禁用(/Wd####)所有你不关心的警告。

答案 2 :(得分:1)

在某些情况下,当您使用遗留代码并且由于较新的编译器变得更敏感时,您可能希望调低这些模块的警告级别以避免数千个警告。此外,在某些情况下,当您与生成的代码进行交互时,您希望调低警告级别。例如ANTLR生成的C代码被视为黑盒子,因此您不需要警告。

答案 3 :(得分:1)

我使用它的一个例子是错误C4996,我把它从3级警告移到4级。例如,VS编译器警告sprintf 可能 不安全,建议您使用非便携式sprintf_s函数。你可以获得很多这些警告,而不是通过所有这些来发现真正的错误,我宁愿防止它们被发布。

我知道我可以为sprintf(以及其他函数的加载)定义一个宏,这将保持可移植性,严格来说应该这样做,但在大型项目中,追踪和修复所有这些警告是一些努力,可能很少回报。

答案 4 :(得分:-2)

我的经验是处理警告和错误,并努力在没有警告的情况下生成代码。我知道这可能看起来像是一种愚蠢或过于严格的方法,但从长远来看它确实会得到回报。相信我!