Namespaces
Variants

C++ attribute: noreturn (since C++11)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Indique que la fonction ne retourne pas.

Table des matières

Syntaxe

[ [ noreturn ] ]

Explication

Indique que la fonction ne retournera pas le flux de contrôle à la fonction appelante après son exécution (par exemple, les fonctions qui terminent l'application, lancent des exceptions, bouclent indéfiniment, etc.). Cet attribut s'applique uniquement au nom de la fonction déclarée dans les déclarations de fonctions.

Si une fonction précédemment déclarée avec [ [ noreturn ] ] est invoquée et que cet appel finit par retourner, le comportement est indéfini à l'exécution .

La première déclaration de la fonction doit spécifier cet attribut si une quelconque déclaration le spécifie. Si une fonction est déclarée avec [ [ noreturn ] ] dans une unité de traduction, et que la même fonction est déclarée sans [ [ noreturn ] ] dans une autre unité de traduction, le programme est mal formé ; aucun diagnostic requis.

Exemple

[[noreturn]] void f()
{
    throw "error";
    // OK
}
void q [[noreturn]] (int i)
{
    // le comportement est indéfini si appelé avec un argument <= 0
    if (i > 0)
        throw "positive";
}
// void h() [[noreturn]]; // error: attribute applied to function type of h, not h itself
int main()
{
    try { f(); } catch(...) {}
    try { q(42); } catch(...) {}
}

Bibliothèque standard

Les fonctions standard suivantes sont déclarées avec l'attribut noreturn :

Fonctions de terminaison
(C++11)
provoque la terminaison normale du programme sans nettoyage
(fonction)
provoque la terminaison anormale du programme (sans nettoyage)
(fonction)
provoque la terminaison normale du programme avec nettoyage
(fonction)
(C++11)
provoque la terminaison rapide du programme sans nettoyage complet
(fonction)
fonction appelée quand la gestion des exceptions échoue
(fonction)
(obsolète en C++11) (supprimé en C++17)
fonction appelée quand une spécification d'exception dynamique est violée
(fonction)
Indications du compilateur
marque un point d'exécution inaccessible
(fonction)
Fonctions levant toujours des exceptions
relance l'exception depuis un std::exception_ptr
(fonction)
relance l'exception stockée
(fonction membre publique de std::nested_exception )
relance son argument avec std::nested_exception intégré
(fonction template)
Sauts non locaux (depuis C++17)
saute vers un emplacement spécifié
(fonction)

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
CWG 2924 C++11 retourner depuis une fonction [ [ noreturn ] ]
entraînait un comportement indéfini
entraîne un comportement indéfini
à l'exécution

Références

  • Norme C++23 (ISO/IEC 14882:2024) :
  • 9.12.10 Attribut Noreturn [dcl.attr.noreturn]
  • Norme C++20 (ISO/CEI 14882:2020) :
  • 9.12.9 Attribut Noreturn [dcl.attr.noreturn]
  • Norme C++17 (ISO/IEC 14882:2017) :
  • 10.6.8 Attribut Noreturn [dcl.attr.noreturn]
  • Norme C++14 (ISO/CEI 14882:2014) :
  • 7.6.3 Attribut Noreturn [dcl.attr.noreturn]
  • Norme C++11 (ISO/IEC 14882:2011) :
  • 7.6.3 Attribut Noreturn [dcl.attr.noreturn]

Voir aussi

Documentation C pour _Noreturn
Documentation C pour [[noreturn]]