编译器支持默认关闭的警告(因大多数开发人员认为它们没有用处而关闭)。 在某些情况下,这些警告与样式选择或旧代码中的常用习语相关。 其他警告与使用相应语言的 Microsoft 扩展相关。 某些警告会指明程序员经常做出错误假设(这可能会导致意外或未定义的行为)的区域。 如果启用所有这些警告,则其中一些警告可能会在库标头中多次出现。 C 运行时库和 C++ 标准库不会在警告级别 /W4 发出警告。

启用默认关闭的警告

可使用以下选项之一来启用一般情况下默认关闭的警告:

  • #pragma warning(default : warning_number )

    指定的警告 (warning_number) 在其默认级别启用。 该警告的文档包含该警告的默认级别。

  • #pragma warning( warning_level : warning_number )

    指定的警告 (warning_number) 在指定的级别 (warning_level) 启用。

  • /Wall

    /Wall 将启用默认情况下禁用的所有警告。 如果使用此选项,则可以使用 /wd 选项关闭单个警告。

  • /wL nnnn

    此选项在 L 级别启用警告 nnnn。

    默认关闭的警告

    Visual Studio 2015 及更高版本

    Visual Studio 2015 和更高版本中默认会关闭以下警告:

    Message C5220(级别 4) “member”: 具有可变限定类型的非静态数据成员不再意味着
    编译器生成的 copy/move 构造函数和 copy/move 赋值运算符不简单 16.7 C5233(级别 4) 未使用显式 lambda 捕获“identifier” 16.10 C5240(级别 4) “attribute-name”: 在此语法位置将忽略属性 16.10 C5243(级别 1) “type-name”: 由于 ABI 限制,使用不完整的类“class-name”可能会导致潜在的一个定义规则冲突 16.10 C5245(级别 4) “function”: 已删除具有内部链接的未引用函数 C5246(级别 1) “member”: 子对象的初始化应括在大括号内 16.10 C5247(级别 1) 节“section-name”是为 C++ 动态初始化保留的。 手动创建节会干扰 C++ 动态初始化,并可能导致未定义的行为 16.11 C5248(级别 1) 节“section-name”是为 C++ 动态初始化保留的。 手动放入节中的变量可能已优化,并且其相对于编译器生成的动态初始化表达式的顺序未指定 16.11

    Visual Studio 2022 及更高版本

    Visual Studio 2022 及更高版本中默认关闭以下警告:

    Message

    14.1 从 Visual Studio 2015 Update 1 开始提供此警告。
    14.3 从 Visual Studio 2015 Update 3 开始提供此警告。
    15.2 从 Visual Studio 2017 版本 15.2 开始提供此警告。
    15.3 从 Visual Studio 2017 版本 15.3 开始提供此警告。
    15.5 从 Visual Studio 2017 版本 15.5 开始提供此警告。
    15.7 从 Visual Studio 2017 版本 15.7 开始提供此警告。
    15.8 从 Visual Studio 2017 版本 15.8 开始提供此警告。
    16.0 从 Visual Studio 2019 RTM 开始提供此警告。
    16.5 从 Visual Studio 2019 版本 16.5 开始提供此警告。
    16.7 从 Visual Studio 2019 版本 16.7 开始提供此警告。
    16.10 从 Visual Studio 2019 版本 16.10 开始提供此警告。
    16.11 从 Visual Studio 2019 版本 16.11 开始提供此警告。
    17.0 从 Visual Studio 2022 版本 17.0 开始提供此警告。
    17.1 从 Visual Studio 2022 版本 17.1 开始提供此警告。
    17.2 从 Visual Studio 2022 版本 17.2 开始提供此警告。
    17.3 从 Visual Studio 2022 版本 17.3 开始提供此警告。
    17.4 从 Visual Studio 2022 版本 17.4 开始提供此警告。
    Perm 除非设置了 /permissive- 编译器选项,否则会关闭此警告。

    早期版本默认关闭的警告

    以下警告在 Visual Studio 2015 版本 15.3 中默认已关闭,在 Visual Studio 2015 版本 15.5 中已启用:

    Message
  •