noreturn
Específicos de Microsoft
El __declspec
atributo indica al compilador que una función no devuelve. A continuación, el compilador sabe que el código que sigue a una llamada a una __declspec(noreturn)
función no es accesible.
Si el compilador encuentra una función con una ruta de acceso de control que no devuelve un valor, genera una advertencia (C4715) o un mensaje de error (C2202). Si no se puede acceder a la ruta de acceso del control debido a una función que nunca devuelve, use __declspec(noreturn)
para evitar esta advertencia o error.
Nota:
La adición de __declspec(noreturn)
a una función que se espera que devuelva resultados puede dar lugar a un comportamiento indefinido.
Ejemplo
En el ejemplo siguiente, cuando se llama al argumento para isZeroOrPositive
es negativo fatal
. No hay ninguna instrucción return en esa ruta de acceso de control, lo que genera una advertencia C4715 que no todas las rutas de acceso de control devuelven un valor. fatal
Declarar como __declspec(noreturn)
mitiga esa advertencia, que es deseable porque no hay ningún punto en él, ya fatal()
que finaliza el programa.
// noreturn2.cpp
#include <exception>
__declspec(noreturn) void fatal()
{
std::terminate();
}
int isZeroOrPositive(int val)
{
if (val == 0)
{
return 0;
}
else if (val > 0)
{
return 1;
}
// this function terminates if val is negative
fatal();
}
int main()
{
isZeroOrPositive(123);
}
FIN de Específicos de Microsoft