noreturn
Specyficzne dla firmy Microsoft
Atrybut __declspec informuje kompilator, że funkcja niczego nie zwraca.W konsekwencji, kompilator wie, że kod po wywołaniu funkcji __declspec(noreturn) jest nieosiągalny.
Jeśli kompilator znajdzie funkcję ze ścieżką kontroli, która nie zwraca wartości, generuje ostrzeżenie (C4715) lub komunikat o błędzie (C2202).Jeśli ze względu na funkcję nigdy nie zwracającą wartości nie można dotrzeć do ścieżki kontroli, można użyć __declspec(noreturn), aby zapobiec temu ostrzeżeniu lub błędowi.
[!UWAGA]
Dodawanie __declspec(noreturn) do funkcji, od której oczekiwane jest zwrócenie wartości, może spowodować niezdefiniowane zachowanie.
Przykład
W następującym przykładzie, klauzula else nie zawiera instrukcji return. Daklarowanie fatal jako __declspec(noreturn) pozwala uniknąć komunikatu błędu lub ostrzeżenia.
// noreturn2.cpp
__declspec(noreturn) extern void fatal () {}
int main() {
if(1)
return 1;
else if(0)
return 0;
else
fatal();
}