Namensräume
Varianten
Aktionen

_Noreturn Funktionsspezifizierer (seit C11)(veraltet in C23)

Von cppreference.com
< c‎ | Sprache

Gibt an, dass die Funktion nicht zu ihrer Aufrufstelle zurückkehrt.

Inhalt

[bearbeiten] Syntax

_Noreturn Funktionsdeklaration (seit C11)(veraltet in C23)

[bearbeiten] Erklärung

Das Schlüsselwort _Noreturn erscheint in einer Funktionsdeklaration und gibt an, dass die Funktion nicht durch Ausführung der return-Anweisung oder durch Erreichen des Endes des Funktionskörpers 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, wenn dies erkannt werden kann.

Der Spezifizierer _Noreturn 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 Komfortmakro noreturn verwendet, das im Header <stdnoreturn.h> bereitgestellt wird.

Der Spezifizierer _Noreturn ist veraltet. Das Attribut [[noreturn]] sollte stattdessen verwendet werden.

Das Makro noreturn ist ebenfalls veraltet.

(seit C23)

[bearbeiten] Schlüsselwörter

_Noreturn

[bearbeiten] Standardbibliothek

Die folgenden Funktionen sind in der Standardbibliothek noreturn

[bearbeiten] Beispiel

#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
 
// causes undefined behavior if i <= 0
// exits if 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...

[bearbeiten] 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)

[bearbeiten] Siehe auch

[[noreturn]](C23)[[_Noreturn]](C23)(veraltet)
{{{notes}}}
zeigt an, dass die Funktion nicht zurückkehrt
(Attributspezifizierer)[bearbeiten]
C++ Dokumentation für [[noreturn]]