_Noreturn słowo kluczowe i noreturn makro (C11)

Słowo _Noreturn kluczowe zostało wprowadzone w języku C11. Informuje kompilator, że funkcja, do którego jest zastosowana, nie wraca do elementu wywołującego. Kompilator wie, że kod po wywołaniu funkcji jest niemożliwy do _Noreturn osiągnięcia. Przykładem funkcji, która nie zwraca, jest przerwanie. Jeśli istnieje możliwość powrotu przepływu sterowania do elementu wywołującego, funkcja nie może mieć atrybutu _Noreturn .

Słowo kluczowe jest zwykle używane za pośrednictwem makra wygody , noreturnpodanego w <pliku stdnoreturn.h>, które mapuje na _Noreturn słowo kluczowe .

Podstawowe korzyści wynikające z używania _Noreturn (lub równoważnego noreturn) sprawiają, że intencja funkcji jest jasna w kodzie dla przyszłych czytelników i wykrywa niezamierzony kod, który nie jest osiągalny.

Funkcja oznaczona noreturn nie powinna zawierać typu zwracanego, ponieważ nie zwraca wartości do elementu wywołującego. Powinna ona mieć wartość void.

Przykład użycia noreturn makra i _Noreturn słowa kluczowego

W poniższym przykładzie pokazano _Noreturn słowo kluczowe i równoważne noreturn makro.

Funkcja IntelliSense może wygenerować podejrzany błąd, E0065, jeśli używasz makra noreturn , które można zignorować. Nie uniemożliwia to uruchomienia przykładu.

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

Wymagania

Makro Wymagany nagłówek
noreturn <stdnoreturn.h>

Zobacz też

/std (Określ wersję standardu języka)
/W4 (Określ poziom ostrzeżenia)
Ostrzeżenie C4702
__declspec(noreturn)