noreturn
Specyficzne dla firmy Microsoft
Atrybut __declspec
informuje kompilator, że funkcja nie zwraca. Kompilator wie, że kod po wywołaniu funkcji jest niemożliwy do __declspec(noreturn)
osiągnięcia.
Jeśli kompilator znajdzie funkcję ze ścieżką sterowania, która nie zwraca wartości, generuje ostrzeżenie (C4715) lub komunikat o błędzie (C2202). Jeśli nie można uzyskać dostępu do ścieżki sterującej z powodu funkcji, która nigdy nie zwraca, użyj polecenia __declspec(noreturn)
, aby zapobiec temu ostrzeżeniu lub błędowi.
Uwaga
Dodanie __declspec(noreturn)
funkcji, która ma zostać zwrócona, może spowodować niezdefiniowane zachowanie.
Przykład
W poniższym przykładzie, gdy argument dla isZeroOrPositive
jest ujemny, fatal
jest wywoływany. W tej ścieżce kontrolnej nie ma instrukcji return, co powoduje ostrzeżenie C4715, że nie wszystkie ścieżki sterujące zwracają wartość. Deklarowanie fatal
jako __declspec(noreturn)
ogranicza to ostrzeżenie, co jest pożądane, ponieważ nie ma w nim żadnego punktu, ponieważ fatal()
kończy program.
// noreturn2.cpp
#include <exception>
__declspec(noreturn) void fatal()
{
std::terminate();
}
int isZeroOrPositive(int val)
{
if (val == 0)
{
return 0;
}
else if (val > 0)
{
return 1;
}
// this function terminates if val is negative
fatal();
}
int main()
{
isZeroOrPositive(123);
}
END Microsoft Specific
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla