noreturn
Remonter à Liste alphabétique des mots clés - Index
<ideTag id="noreturn"></ideTag>
Sommaire
Syntaxe
FUNCTION NAME [[noreturn]]
Description
L'attribut noreturn spécifie qu'une fonction ne renvoie rien ; par exemple, les fonctions qui quittent l'application, exécutent une boucle infinie ou déclenchent des exceptions. Cela signifie que le flux de contrôle ne revient pas à la fonction appelante. Si une fonction marquée noreturn est appelée et exécute éventuellement une instruction return, le programme est considéré comme mal formé, et le compilateur génère une erreur.
Par exemple
void f [[noreturn]] ()
{
throw "error"; // OK
}
void g [[noreturn]] (int i)
{ // ill-formed
if (i > 0)
throw "positive";
}
Dans cet exemple, le compilateur génère une erreur E2541, car g
renvoie void
si i
est inférieur ou égal à 0.
L'attribut noreturn est utile pour quelques fonctions de bibliothèque qui ne peuvent pas avoir de retour, telles que abort et exit (C++). Vous pouvez aussi définir vos propres fonctions qui n'ont jamais de retour en utilisant l'attribut noreturn.
Par exemple
void fatal(void) [[noreturn]];
void fatal(void)
{
// ...
exit(1);
}
Le mot clé noreturn
indique au compilateur C++ de considérer que fatal
ne peut pas avoir de retour. Le compilateur peut alors optimiser sans se soucier de ce qui arriverait si fatal
ne renvoyait jamais de retour. Ainsi, l'emploi de noreturn
peut améliorer le code. Plus important encore, il évite les faux avertissements de variables non initialisées. Vous ne pouvez pas supposer que les registres sauvegardés par la fonction appelante sont restaurés avant l'appel de la fonction avec l'attribut noreturn. Pour une fonction noreturn, avoir un type de retour autre que void n'a pas de sens.
Portabilité
' | POSIX | Win32 | Win64 | ANSI C | ANSI C++ |
---|---|---|---|---|---|
obsolète |
+ |
Remarque : L'attribut noreturn n'est pas supporté par les compilateurs C++ méliorés par Clang.