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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (10)

在我的VS 2010中,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);

我觉得奇怪的是noreturn注解abort()有人知道原因吗?是bug吗?

提问于
用户回答回答于

我认为这肯定是错误的,因为不管STD的任务是什么,VisualStudio附带的ABORT()实现永远不会从ABORT返回。在SIGABRT的信号处理程序中,你不能做任何将防止_在VisualStudio的ABORT()实现结束时调用Exit(3)(我在查看VS 2005附带的源中的文件ABORT.c,第137行)。

所以既然__Decspec(Noback)是一个实现的东西,由于在VisualStudio中中止的实现永远不会、永远不会正常地返回,所以应使用ABORT()标记__解密规范(不返回)

因此,它的缺席是一个错误。

我想你应该把这件事报告为https://connect.microsoft.com/VisualStudio/

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    27 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 富有想象力的人

    2 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券