_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 , noreturn
podanego 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 , 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ę standardową języka)
/W4 (Określ poziom ostrzeżenia)
Ostrzeżenie C4702
__declspec(noreturn)