C++ [[已弃用]]导致VS2017中的生成失败(错误C4996)
上述代码在VS2017中产生以下错误:C++ [[已弃用]]导致VS2017中的生成失败(错误C4996),c++,visual-studio-2017,deprecated,cl.exe,C++,Visual Studio 2017,Deprecated,Cl.exe,上述代码在VS2017中产生以下错误: [[deprecated]] void foo(){}; int main() { foo(); } 不幸的是,搜索此错误会导致堆积如山的“如何使用[[已弃用]]”和“哪些函数已弃用?”风格的问题 我检查的每一个资源似乎都表明[[deprecated]]的使用应该像上面写的一样简单——编译器错误/警告是意料之中的,而不是构建失败。注释掉[[deprecated]]行将导致生成成功 该项目的目标是Windows SDK版本10.0.17763.0
[[deprecated]]
void foo(){};
int main()
{
foo();
}
不幸的是,搜索此错误会导致堆积如山的“如何使用[[已弃用]]”和“哪些函数已弃用?”风格的问题
我检查的每一个资源似乎都表明[[deprecated]]的使用应该像上面写的一样简单——编译器错误/警告是意料之中的,而不是构建失败。注释掉[[deprecated]]行将导致生成成功
该项目的目标是Windows SDK版本10.0.17763.0
cl.exe版本为19.16.27027
我是否在使用[[deprecated]]时错过了一些明显的东西,或者VS2017正在寻找打破它的方法?您会收到一个错误,而不是警告,因为启用了“SDL检查”。它看起来像VS17中默认启用的SDL。发件人: /sdl将这些警告作为错误启用: C4146/we4146一元减号运算符应用于无符号类型, 导致未签名的结果 C4308/we4308转换为无符号的负整数常量 类型,导致可能无意义的结果 C4532/we4532在a___中使用continue、break或goto关键字 /最后,块在异常终止期间具有未定义的行为 C4533/we4533初始化变量的代码将不会执行 C4700/we4700使用未初始化的局部变量 C4703/we4703使用可能未初始化的本地指针 变数 特定C运行时(CRT)时C4789/we4789缓冲区溢出 使用函数 C4995/we4995不推荐使用带有pragma标记的函数 C4996/we4996使用标记为已弃用的函数 要修复此问题,请转到“属性”->“C/C++”->“SDL检查”,设置为“否(/SDL-)。在这之后你会得到
1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>deprecation.cpp
1>d:\source\deprecation.cpp(6): error C4996: 'foo': was declared deprecated
1>d:\source\deprecation.cpp(2): note: see declaration of 'foo'
1>Done building project "test.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
看起来VS只是。您可能正在生成警告作为错误。嗯,编译器错误是生成失败。请小心您的要求。你可能会明白的。嗨,Dmytro,谢谢你详细的回答。我转到“项目”>“属性”并将SDL检查设置为“否”(同时,将警告视为错误已在“否”上),并尝试重新生成-遇到了相同的错误。@vkn,您是否检查了配置是否处于活动状态?它未处于活动状态-我将配置更改为“活动”,将SDL检查设置为“否”,代码现在可以正确编译。非常感谢。
: warning C4996: 'foo': was declared deprecated
: note: see declaration of 'foo'