Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ [[已弃用]]导致VS2017中的生成失败(错误C4996)_C++_Visual Studio 2017_Deprecated_Cl.exe - Fatal编程技术网

C++ [[已弃用]]导致VS2017中的生成失败(错误C4996)

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

上述代码在VS2017中产生以下错误:

[[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'