C++ attribute: noreturn (since C++11)
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 |
|
|
(C++23)
|
marque un point d'exécution inaccessible
(fonction) |
Fonctions levant toujours des exceptions |
|
|
(C++11)
|
relance l'exception depuis un
std::exception_ptr
(fonction) |
|
relance l'exception stockée
(fonction membre publique de
std::nested_exception
)
|
|
|
(C++11)
|
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]]
|