noreturn
Microsoft-spezifisch
Das __declspec
Attribut teilt dem Compiler mit, dass eine Funktion nicht zurückgegeben wird. Der Compiler weiß dann, dass der Code nach einem Aufruf einer __declspec(noreturn)
Funktion nicht erreichbar ist.
Wenn der Compiler eine Funktion mit einem Kontrollpfad findet, die keinen Wert zurückgibt, wird eine Warnung (C4715) oder Fehlermeldung (C2202) generiert. Wenn der Steuerelementpfad aufgrund einer Funktion, die nie zurückgegeben wird, nicht erreicht werden kann, können Sie __declspec(noreturn)
diese Warnung oder diesen Fehler verhindern.
Hinweis
Das Hinzufügen __declspec(noreturn)
zu einer Funktion, die erwartet wird, kann zu einem nicht definierten Verhalten führen.
Beispiel
Im folgenden Beispiel wird aufgerufen, wenn das Argument isZeroOrPositive
negativ fatal
ist. Es gibt keine Rückgabe-Anweisung in diesem Steuerelementpfad, was zu warnungen C4715 führt, dass nicht alle Steuerelementpfade einen Wert zurückgeben. Das Deklarieren fatal
als __declspec(noreturn)
Entschärfung dieser Warnung, was wünschenswert ist, da es keinen Punkt gibt, da fatal()
das Programm beendet wird.
// 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);
}
Ende Microsoft-spezifisch