Mot clé _Noreturn
et macro noreturn
(C11)
Le mot clé _Noreturn
a été introduit dans C11. Il indique au compilateur que la fonction à laquelle il est appliqué ne revient pas à l’appelant. Le compilateur sait que le code suivant un appel à une fonction _Noreturn
est inaccessible. Un exemple de fonction qui ne retourne pas est abort. S’il existe une possibilité pour le flux de contrôle de revenir à l’appelant, la fonction ne doit pas avoir l’attribut _Noreturn
.
Le mot clé est généralement utilisé via la macro pratique, noreturn
, fournie dans <stdnoreturn.h>, qui correspond au mot clé _Noreturn
.
Les principaux avantages de l’utilisation de _Noreturn
(ou de l’équivalent noreturn
) sont de rendre l’intention de la fonction claire dans le code pour les futurs lecteurs, et de détecter involontairement le code inaccessible.
Une fonction marquée noreturn
ne doit pas inclure de type de retour, car elle ne retourne pas de valeur à l’appelant. Elle doit avoir la valeur void
.
Exemple utilisant la macro noreturn
et le mot clé _Noreturn
L’exemple suivant illustre le mot clé _Noreturn
et la macro noreturn
équivalente.
IntelliSense peut générer une erreur trompeuse, E0065
, si vous utilisez la macro noreturn
que vous pouvez ignorer. Il ne vous empêche pas d’exécuter l’exemple.
// Compile with Warning Level4 (/W4) and /std:c11
#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
noreturn void fatal_error(void)
{
exit(3);
}
_Noreturn void not_coming_back(void)
{
puts("There's no coming back");
fatal_error();
return; // warning C4645 - function declared with noreturn has a return statement
}
void done(void)
{
puts("We'll never get here");
}
int main(void)
{
not_coming_back();
done(); // warning c4702 - unreachable code
return 0;
}
Spécifications
Macro | En-tête requis |
---|---|
noreturn |
<stdnoreturn.h> |
Voir aussi
/std (Spécifier la version du standard du langage)
/W4 (Spécifier le niveau d’avertissement)
Avertissement C4702
__declspec(noreturn)