首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >abort()在VS2010中不是__declspec(不返回)

abort()在VS2010中不是__declspec(不返回)
EN

Stack Overflow用户
提问于 2010-08-26 03:46:47
回答 1查看 1.8K关注 0票数 16

在我的VS2010副本中,stdlib.h包含(第353-355行)

代码语言:javascript
复制
_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注解。有人知道这是什么原因吗?这是个bug吗?

编辑:在VS2008中是一样的,但stdlib.h的第371-373行

缺少noreturn注释将触发error C4716

进一步的参考:C++0x proposal for standardization of the noreturn annotation,它说abort应该携带它。

编辑:看起来像一堆讨论消失了一个删除的答案,但它的要点在Defect Report #048中涵盖。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-27 21:03:00

我认为这绝对是错误的,因为无论std要求什么,Visual Studio附带的abort()实现将永远不会从abort返回。您不能在SIGABRT的信号处理程序中做任何事情来阻止在Visual Studio的abort()实现结束时调用_exit(3) (我正在查看VS2005附带的源代码中的文件abort.c,第137行)。

因此,既然__declspec(noreturn)是一个实现的东西,而且在Visual Studio中实现abort永远不会正常返回,那么abort()应该用__declspec(noreturn)来标记。

由此可以得出,它的缺席是一个错误。

我认为你应该在https://connect.microsoft.com/VisualStudio/上报这是一个错误

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3569643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档