在我的VS2010副本中,stdlib.h包含(第353-355行)
_CRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code); _CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); _CRTIMP void __cdecl abort(void);
我觉得奇怪的是abort()
上没有noreturn
注释。 有谁知道这个的原因? 这是一个错误吗?
编辑:在VS2008中,它是相同的,但是stdlib.h的第371-373行
缺少noreturn
注释会触发错误C4716 。
进一步参考: 用于标准化noreturn
注释的C ++ 0x提议 ,其中说abort
应该携带它。
编辑:看起来像一堆讨论消失了,删除的答案,但它的要点包含在缺陷报告#048中 。
我认为这绝对是错误的,因为无论std命令是什么,Visual Studio附带的abort()实现都不会从abort返回。 您无法在SIGABRT的信号处理程序中执行任何操作,以防止在Visual Studio的abort()实现结束时调用_exit(3)(我正在查看文件abort.c,第137行中包含的源代码VS 2005)。
所以,因为__declspec(noreturn)是一个实现的东西,并且因为在Visual Studio中实现中止永远不会正常返回,所以abort()应该用__declspec(noreturn)标记。
因此,它缺席是一个错误。
我认为您应该在https://connect.microsoft.com/VisualStudio/上将此报告为错误
以上就是c/c++开发分享在VS2010中,abort()不是__declspec(noreturn)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549287.html