_Noreturn
klíčové slovo a noreturn
makro (C11)
Klíčové _Noreturn
slovo bylo zavedeno v C11. Říká kompilátoru, že funkce, na kterou se použije, se nevrátí do volajícího. Kompilátor ví, že kód následující volání _Noreturn
funkce je nedostupný. Příkladem funkce, která nevrací, je přerušení. Pokud je možné, aby se tok řízení vrátil volajícímu, funkce nesmí mít _Noreturn
atribut.
Klíčové slovo se obvykle používá prostřednictvím pohodlného makra , noreturn
zadaného v <stdnoreturn.h>, který se mapuje na _Noreturn
klíčové slovo.
Hlavními výhodami pro použití _Noreturn
(nebo ekvivalent noreturn
) je záměr funkce jasně v kódu pro budoucí čtenáře a zjištění neúmyslně nedostupného kódu.
Funkce označená noreturn
by neměla obsahovat návratový typ, protože nevrací hodnotu volajícímu. Měla by mít hodnotu void
.
Příklad použití noreturn
makra a _Noreturn
klíčového slova
Následující příklad ukazuje _Noreturn
klíčové slovo a ekvivalentní noreturn
makro.
IntelliSense může vygenerovat nechutnou chybu, E0065
pokud použijete makro noreturn
, které můžete ignorovat. Nezabrání vám spustit ukázku.
// 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;
}
Požadavky
Makro | Požadovaný hlavičkový soubor |
---|---|
noreturn |
<stdnoreturn.h> |
Viz také
/std (určení standardní verze jazyka)
/W4 (určení úrovně upozornění)
Upozornění C4702
__declspec(noreturn)