Namespaces
Variants

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

From cppreference.net

Spécifie que la fonction ne retourne pas à son point d'invocation.

Table des matières

Syntaxe

_Noreturn déclaration_de_fonction (depuis C11) (obsolète en C23)

Explication

Le mot-clé _Noreturn apparaît dans une déclaration de fonction et spécifie que la fonction ne retourne pas en exécutant l'instruction return ou en atteignant la fin du corps de la fonction (elle peut retourner en exécutant longjmp ). Si la fonction déclarée _Noreturn retourne, le comportement est indéfini. Un diagnostic du compilateur est recommandé si cela peut être détecté.

Le spécificateur _Noreturn peut apparaître plusieurs fois dans la même déclaration de fonction, le comportement est le même que s'il apparaissait une seule fois.

Ce spécificateur est généralement utilisé via la macro de commodité noreturn , qui est fournie dans l'en-tête <stdnoreturn.h> .

_Noreturn Le spécificateur de fonction est déprécié. [[ noreturn ]] L'attribut devrait être utilisé à la place.

La macro noreturn est également dépréciée.

(depuis C23)

Mots-clés

_Noreturn

Bibliothèque standard

Les fonctions suivantes sont noreturn dans la bibliothèque standard :

Exemple

#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.");
}

Sortie :

Preparing to exit...

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 6.7.4 Spécificateurs de fonction (p: TBD)
  • 7.23 _Noreturn <stdnoreturn.h> (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 6.7.4 Spécificateurs de fonction (p: 90-91)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 263)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 6.7.4 Spécificateurs de fonction (p: 125-127)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 361)

Voir aussi

[[ noreturn ]] (C23) [[ _Noreturn ]] (C23) (obsolète)
indique que la fonction ne retourne pas
(spécificateur d'attribut)
Documentation C++ pour [[noreturn]]