微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 C4596 视为警告

如何解决将 C4596 视为警告

在 VS 2019 16.8.6 中使用编译器选项 /Wall,我得到一个 C4596;

错误 C4596:'i':成员声明中的限定名非法

对于以下测试程序:

struct S {
    int S::i;
};
int main() {}

Here's a godbolt

  • 错误适用于 /Wall 中可用的所有 VS 2019 版本。
  • VS 2017 15.9.33 显示了相同的行为。
  • VS 2015 不显示
  • VS 2017 和 2019 甚至在使用 /w 禁用所有警告时都会显示它,但是专门禁用 4596 确实会禁用它。

这是一个错误还是我在做/读错了什么?`

有没有办法将某些错误,尤其是这种错误视为警告(而不是相反)?

解决方法

有一种(有点奇怪的)方法可以将此警告“重置”为“正常”模式(即将其视为错误);这涉及使用 #pragma warning(n:xxxx) 指令,如下所示:

#pragma warning(4:4596)
struct S {
    int S::i; // With that #pragma,this now generates 'just' a warning
};

警告 C4596:'i':成员声明中的限定名非法

我不参与 MSVC 编译器的设计,我真的不能说为什么会发生这种情况。但是,可以在 here 中找到有关使用 #pragma 指令调整其警告的更多信息。

另外,可能令人感兴趣的是,clang-cl 编译器(在 Visual Studio 中使用)生成只是一个警告,无论是否带有该编译指示:>

警告:成员“i”的额外资格 [-Wmicrosoft-extra-qualification]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。