_Noreturn Funktionsspezifizierer (seit C11)(veraltet in C23)
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 Das Makro |
(seit C23) |
[bearbeiten] Schlüsselwörter
[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
| zeigt an, dass die Funktion nicht zurückkehrt (Attributspezifizierer) | |
| C++ Dokumentation für
[[noreturn]] | |