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)