noreturn

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Liste alphabétique des mots clés - Index


<ideTag id="noreturn"></ideTag>

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.

Voir aussi