首页 > 解决方案 > [[deprecated]] 在 Visual Studio 中导致错误而不是警告

问题描述

根据cppreference [[deprecated("message string")]]我们应该能够使用该符号,但在 VS 中会导致错误。

例如,我不想在 UNICODE 构建中对 ANSI 方法发出警告,反之亦然:

#ifdef UNICODE
[[deprecated("This method does not work well in UNICODE builds")]]
#endif // UNICODE
    void f() {}

编译器不允许我编译,但标准说该属性应该允许使用但会发出警告消息。

如何解决这个问题?,顺便说一句。我的项目设置为最大符合标准。

VS违反标准的原因是什么,有没有更好的方法对上述情况发出警告?

标签: c++attributes

解决方案


派对迟到了,但今天早上我花了几个小时。

默认情况下,Visual Studio 和 sdl(安全开发生命周期)编译标志 [[deprecated]]视为错误。不管你同意与否,他们都是这样做的。

要解决此问题,请转到Configuration Properties -> C/C++ -> Command Line并添加/sdl /w34996

/wX 部分表示警告的严重性,其余部分是您要报告为警告的错误。

我希望这可以节省人们一些时间。


推荐阅读