在VS2010中,abort()不是__declspec(noreturn)

在我的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/上将此报告为错误