noreturn
Nach oben zu Schlüsselwörter alphabetisch - Index
Inhaltsverzeichnis
Syntax
FUNCTION NAME [[noreturn]]
Beschreibung
Das Attribut noreturn legt fest, dass eine Funktion nicht zurückkehrt; beispielsweise Funktionen, die die Anwendung beenden, eine Endlosschleife ausführen oder Exceptions auslösen. Das bedeutet, dass die aufrufende Funktion die Steuerung nicht zurückerhält. Wenn eine mit noreturn gekennzeichnete Funktion aufgerufen wird und irgendwann eine return-Anweisung ausführt, ist das Programm nicht wohlgeformt, und der Compiler gibt eine Meldung aus.
Zum Beispiel:
void f [[noreturn]] ()
{
throw "error"; // OK
}
void g [[noreturn]] (int i)
{ // ill-formed
if (i > 0)
throw "positive";
}
In diesem Beispiel erzeugt der Compiler einen E2541-Fehler, weil g
void
zurückgibt, wenn i
kleiner oder gleich 0 ist.
Das Attribut noreturn ist für einige Bibliotheksfunktionen nützlich, die nicht zurückkehren können, wie z.B. abort und exit (C++). Sie können mit dem Attribut noreturn auch eigene Funktionen definieren, die nie zurückkehren.
Zum Beispiel:
void fatal(void) [[noreturn]];
void fatal(void)
{
// ...
exit(1);
}
Das Schlüsselwort noreturn
teilt dem C++-Compiler mit, dass fatal
nicht zurückkehren kann. Der Compiler kann dann Optimierungen ohne Rücksicht darauf vornehmen, was geschehen würde, wenn fatal
zurückkehrt. Daher kann der Quelltext durch die Verwendung von noreturn
verbessert werden. Wichtiger ist aber, dass noreturn
unechte Pseudowarnungen von nicht initialisierten Variablen zu verhindern hilft. Sie können nicht davon ausgehen, dass von der aufrufenden Funktion gespeicherte Register vor dem Aufruf der Funktion mit dem Attribut noreturn wiederhergestellt werden. noreturn-Funktionen sollten immer den Rückgabetyp void
haben (alles andere wäre sinnlos).
Portabilität
POSIX | Win32 | Win64 | ANSI C | ANSI C++ | |
---|---|---|---|---|---|
deprecated |
+ |
Hinweis: Das Attribut noreturn wird von C++-Compilern, die durch Clang erweitert wurden, nicht unterstützt.