c/c++语言开发共享在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/上将此报告为错误

      以上就是c/c++开发分享在VS2010中,abort()不是__declspec(noreturn)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549287.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐