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ż

__declspec
Słowa kluczowe