【问题标题】:Why change warning level of a specific warning in C++?为什么要更改 C++ 中特定警告的警告级别?
【发布时间】:2011-10-31 12:46:26
【问题描述】:

Visual C++ 功能#pragma warning 允许更改特定警告的警告级别。说警告X默认有4级,然后在

#pragma warning( 3, X )

从那时起它将达到 3 级。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    当您想在级别 3 或 4 上运行,但您想查看/不查看特定消息时,您可以更改其级别。当然,如果警告级别不是您想的那样,pragma 可能无效,但这就是pragma 的生活。

    【讨论】:

      【解决方案2】:

      与使用 /W4 并禁用 (/Wd####) 的所有警告相比,获取您想要检测的一两个 4 级警告并使用编译指示将它们带入 3 级要容易得多不在乎。

      【讨论】:

        【解决方案3】:

        我使用它的一个例子是错误 C4996,我将它从 3 级警告移至 4 级。例如,VS 编译器警告 sprintf 可能 不安全,建议您改用非便携式 sprintf_s 函数。你可以得到很多这样的警告,与其费力地寻找真正的错误,我更愿意阻止它们被发出。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 这如何解释需要更改警告级别?
            • 这根本不能回答问题。
            • @e8johan:其实我连最后一段都看不出来。
            • 您的意思是“什么是我真正需要更改 C++ 中特定警告的警告级别的真实示例?”?不,它不回答它。它没有解释为什么我要从 4 级中选择警告 X 并将其设为 3 级,或者从 3 级中选择警告 Y 并将其设为 4 级,这就是所要求的。
            猜你喜欢
            • 1970-01-01
            • 2011-04-26
            • 2013-01-16
            • 1970-01-01
            • 2015-05-22
            • 2013-07-16
            • 2011-09-12
            • 2011-02-14
            • 1970-01-01
            相关资源
            最近更新 更多