Sdílet prostřednictvím


_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 , noreturnzadané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, E0065pokud 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)