_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)