Namespaces
Variants

_Noreturn function specifier (since C11) (deprecated in C23)

From cppreference.net

Especifica que la función no retorna a su punto de invocación.

Contenidos

Sintaxis

_Noreturn declaración_de_función (desde C11) (obsoleto en C23)

Explicación

La palabra clave _Noreturn aparece en una declaración de función y especifica que la función no retorna mediante la ejecución de la sentencia return o al alcanzar el final del cuerpo de la función (puede retornar ejecutando longjmp ). Si la función declarada como _Noreturn retorna, el comportamiento es indefinido. Se recomienda un diagnóstico del compilador si esto puede detectarse.

El especificador _Noreturn puede aparecer más de una vez en la misma declaración de función, el comportamiento es el mismo que si apareciera una vez.

Este especificador se utiliza típicamente a través de la macro de conveniencia noreturn , que se proporciona en el encabezado <stdnoreturn.h> .

_Noreturn el especificador de función está obsoleto. Se debe utilizar en su lugar el atributo [[ noreturn ]] .

La macro noreturn también está obsoleta.

(desde C23)

Palabras clave

_Noreturn

Biblioteca estándar

Las siguientes funciones son noreturn en la biblioteca estándar:

Ejemplo

#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
// causes undefined behavior if i <= 0
// exits if i > 0
noreturn void exit_now(int i) // or _Noreturn void exit_now(int i)
{
    if (i > 0)
        exit(i);
}
int main(void)
{
    puts("Preparing to exit...");
    exit_now(2);
    puts("This code is never executed.");
}

Salida:

Preparing to exit...

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 6.7.4 Especificadores de función (p: TBD)
  • 7.23 _Noreturn <stdnoreturn.h> (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 6.7.4 Especificadores de función (p: 90-91)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 263)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 6.7.4 Especificadores de función (p: 125-127)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 361)

Véase también

[[ noreturn ]] (C23) [[ _Noreturn ]] (C23) (obsoleto)
indica que la función no retorna
(especificador de atributo)
documentación de C++ para [[noreturn]]