Namespaces
Variants

_Noreturn function specifier (since C11) (deprecated in C23)

From cppreference.net

Gibt an, dass die Funktion nicht zu ihrem Aufrufpunkt zurückkehrt.

Inhaltsverzeichnis

Syntax

_Noreturn Funktionsdeklaration (seit C11) (veraltet in C23)

Erklärung

Das _Noreturn Schlüsselwort erscheint in einer Funktionsdeklaration und spezifiziert, dass die Funktion nicht durch Ausführung der return-Anweisung oder durch Erreichen des Endes des Funktionsrumpfs zurückkehrt (sie kann durch Ausführung von longjmp zurückkehren). Wenn die als _Noreturn deklarierte Funktion zurückkehrt, ist das Verhalten undefiniert. Eine Compiler-Diagnose wird empfohlen, falls dies erkannt werden kann.

Der _Noreturn Spezifizierer kann mehr als einmal in derselben Funktionsdeklaration erscheinen, das Verhalten ist dasselbe, als ob er einmal erschienen wäre.

Dieser Spezifizierer wird typischerweise über das praktische Makro noreturn verwendet, das im Header <stdnoreturn.h> bereitgestellt wird.

_Noreturn Funktionsspezifizierer ist veraltet. Stattdessen sollte das [[ noreturn ]] Attribut verwendet werden.

Das Makro noreturn ist ebenfalls veraltet.

(seit C23)

Schlüsselwörter

_Noreturn

Standardbibliothek

Die folgenden Funktionen sind noreturn in der Standardbibliothek:

Beispiel

#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
// verursacht undefiniertes Verhalten wenn i <= 0
// beendet wenn i > 0
noreturn void exit_now(int i) // or _Noreturn void exit_now(int i)
{
    if (i > 0)
        exit(i);
}
int main(void)
{
    puts("Preparing to exit...");
    exit_now(2);
    puts("This code is never executed.");
}

Ausgabe:

Preparing to exit...

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 6.7.4 Funktionsspezifizierer (S.: TBD)
  • 7.23 _Noreturn <stdnoreturn.h> (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 6.7.4 Funktionsspezifizierer (S: 90-91)
  • 7.23 _Noreturn <stdnoreturn.h> (S: 263)
  • C11-Standard (ISO/IEC 9899:2011):
  • 6.7.4 Funktionsspezifizierer (S: 125-127)
  • 7.23 _Noreturn <stdnoreturn.h> (S: 361)

Siehe auch

[[ noreturn ]] (C23) [[ _Noreturn ]] (C23) (veraltet)
gibt an, dass die Funktion nicht zurückkehrt
(Attributspezifizierer)
C++-Dokumentation für [[noreturn]]