Udostępnij za pośrednictwem


_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 powraca do elementu wywołującego. Kompilator wie, że kod po wywołaniu funkcji jest niemożliwy do _Noreturn osiągnięcia. Przykład funkcji, która nie zwraca, jest przerywana. 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 nieumyślnie niedostępny kod.

Oznaczona noreturn funkcja 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ć fałszywy błąd , E0065jeś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ę standardową języka)
/W4 (Określ poziom ostrzeżenia)
Ostrzeżenie C4702
__declspec(noreturn)