Ben*_*igt 16 c c++ visual-studio-2010 abort
在我的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);
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪,没有noreturn注释abort().有谁知道这个的原因?这是一个错误吗?
编辑:在VS2008中,它是相同的,但是stdlib.h的第371-373行
缺少noreturn注释会触发错误C4716.
进一步参考:用于noreturn标注注释的C++ 0x提议,它表示abort应该携带它.
编辑:看起来像一堆讨论消失了删除的答案,但它的要点包含在缺陷报告#048中.
我认为这绝对是错误的,因为无论std命令是什么,Visual Studio附带的abort()实现都不会从中止返回.你不能在SIGABRT的信号处理程序中做任何事情,这会阻止在Visual Studio的abort()实现结束时调用_exit(3)(我正在查看文件中的abort.c,第137行) VS 2005).
因为__declspec(noreturn)是一个实现的东西,因为在Visual Studio中实现abort永远不会正常返回,所以abort()应该用__declspec(noreturn)标记.
因此,它缺席是一个错误.
我认为您应该在https://connect.microsoft.com/VisualStudio/上将此报告为错误