如何解决将 C4596 视为警告
在 VS 2019 16.8.6 中使用编译器选项 /Wall
,我得到一个 C4596;
错误 C4596:'i':成员声明中的限定名非法
对于以下测试程序:
struct S {
int S::i;
};
int main() {}
- 该错误适用于 /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 举报,一经查实,本站将立刻删除。