_Noreturn parola chiave e noreturn macro (C11)

La _Noreturn parola chiave è stata introdotta in C11. Indica al compilatore che la funzione a cui viene applicata non torna al chiamante. Il compilatore sa che il codice che segue una chiamata a una _Noreturn funzione non è raggiungibile. Un esempio di funzione che non restituisce è l'interruzione. Se è possibile che il flusso di controllo torni al chiamante, la funzione non deve avere l'attributo _Noreturn .

La parola chiave viene in genere usata tramite la macro di praticità, noreturn, fornita in <stdnoreturn.h>, che esegue il _Noreturn mapping alla parola chiave .

I vantaggi principali per l'uso _Noreturn (o l'equivalente noreturn) rendono chiara l'intenzione della funzione nel codice per i lettori futuri e il rilevamento involontariamente non raggiungibile del codice.

Una funzione contrassegnata noreturn non deve includere un tipo restituito perché non restituisce un valore al chiamante. Il valore dovrebbe essere void.

Esempio di utilizzo di noreturn macro e _Noreturn parola chiave

Nell'esempio seguente viene illustrata la _Noreturn parola chiave e la macro equivalente noreturn .

IntelliSense può generare un errore spurio, E0065, se si usa la macro noreturn che è possibile ignorare. Non impedisce l'esecuzione dell'esempio.

// 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;
}

Requisiti

Macro Intestazione obbligatoria
noreturn <stdnoreturn.h>

Vedi anche

/std (specifica la versione standard del linguaggio)
/W4 (specificare il livello di avviso)
Avviso C4702
__declspec(noreturn)