c++ - abort() no es__declspec(noreturn) en VS2010
visual-studio-2010 (1)
Creo que esto es definitivamente incorrecto porque, independientemente de los mandatos estándar, la implementación abort () incluida con Visual Studio nunca regresará de abortar. No puede hacer nada en el controlador de señales para SIGABRT que evitará que se llame a _exit (3) al final de la implementación abort () de Visual Studio (estoy viendo el archivo abort.c, línea 137 en las fuentes enviadas con VS 2005).
Por lo tanto, dado que __declspec (noreturn) es una cuestión de implementación y como la implementación de abortar en Visual Studio nunca volverá normalmente, abort () debe etiquetarse con __declspec (noreturn).
De ello se deduce que su ausencia es un error.
Creo que deberías informar esto como un error en https://connect.microsoft.com/VisualStudio/
En mi copia de VS2010, stdlib.h contiene (líneas 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);
Me parece extraño que no haya ninguna anotación de noreturn
en el abort()
. ¿Alguien sabe una razón para esto? ¿Es un error?
EDIT: En VS2008, es lo mismo, pero las líneas 371-373 de stdlib.h
La falta de la anotación noreturn
está provocando el error C4716 .
Referencia adicional: C ++ 0x propuesta para la estandarización de la anotación noreturn
, que dice que abort
debe llevarla.
EDITAR: Parece que un montón de discusión desapareció con una respuesta eliminada, pero la esencia de esto está cubierta en el Informe de Defectos # 048 .