stdin, stdout, stderr
Von cppreference.com
| Definiert in Header <stdio.h> |
||
| #define stdin /* implementierungsabhängig */ |
(1) | |
| #define stdout /* implementierungsabhängig */ |
(2) | |
| #define stderr /* implementierungsabhängig */ |
(3) | |
Drei Textströme sind vordefiniert. Diese Ströme werden beim Programmstart implizit geöffnet und sind unorientiert.
1) Verbunden mit dem Stream der Standardeingabe, der zum Lesen von konventionellen Eingaben verwendet wird. Beim Programmstart ist der Stream nur dann vollständig gepuffert, wenn festgestellt werden kann, dass der Stream nicht auf ein interaktives Gerät verweist.
2) Verbunden mit dem Stream der Standardausgabe, der zum Schreiben von konventionellen Ausgaben verwendet wird. Beim Programmstart ist der Stream nur dann vollständig gepuffert, wenn festgestellt werden kann, dass der Stream nicht auf ein interaktives Gerät verweist.
3) Verbunden mit dem Stream der Standardfehlerausgabe, der zum Schreiben von Diagnoseausgaben verwendet wird. Beim Programmstart ist der Stream nicht vollständig gepuffert.
Was ein interaktives Gerät darstellt, ist implementierungsabhängig.
Diese Makros werden zu Ausdrücken vom Typ FILE* erweitert.
Inhalt |
[bearbeiten] Hinweise
Obwohl nicht von POSIX vorgeschrieben, ist die UNIX-Konvention, dass stdin und stdout zeilenweise gepuffert sind, wenn sie mit einem Terminal verbunden sind, und stderr ungepuffert ist.
Diese Makros können zu modifizierbaren Lvalues erweitert werden. Wenn eines dieser FILE* Lvalues modifiziert wird, führen nachfolgende Operationen auf dem entsprechenden Stream zu einem nicht spezifizierten oder undefinierten Verhalten.
[bearbeiten] Beispiel
Dieses Beispiel zeigt eine Funktion, die äquivalent zu printf ist.
Führen Sie diesen Code aus
#include <stdarg.h> #include <stdio.h> int my_printf(const char* restrict fmt, ...) { va_list vl; va_start(vl, fmt); int ret = vfprintf(stdout, fmt, vl); va_end(vl); return ret; } int main(void) { my_printf("Rounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3); my_printf("Padding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5); my_printf("Scientific:\t%E %e\n", 1.5, 1.5); my_printf("Hexadecimal:\t%a %A\n", 1.5, 1.5); }
Mögliche Ausgabe
Rounding: 1.500000 2 1.30000000000000004440892098500626 Padding: 01.50 1.50 1.50 Scientific: 1.500000E+00 1.500000e+00 Hexadecimal: 0x1.8p+0 0X1.8P+0
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.21.1 Einleitung (S. TBD)
- 7.21.2 Ströme (S. TBD)
- 7.21.2 Dateien (S. TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.21.1 Einleitung (S. 217-218)
- 7.21.2 Ströme (S. 217-219)
- 7.21.2 Dateien (S. 219-221)
- C11-Standard (ISO/IEC 9899:2011)
- 7.21.1 Einleitung (S. 296-298)
- 7.21.2 Ströme (S. 298-299)
- 7.21.2 Dateien (S. 300-302)
- C99-Standard (ISO/IEC 9899:1999)
- 7.19.1 Einleitung (S. 262-264)
- 7.19.2 Ströme (S. 264-265)
- 7.19.2 Dateien (S. 266-268)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 7.9.1 Einleitung
- 7.9.2 Ströme
- 7.9.3 Dateien
[bearbeiten] Siehe auch
| Objekttyp, der alle für die Steuerung eines C-I/O-Streams benötigten Informationen speichern kann (typedef) | |
| C++ Dokumentation für stdin, stdout, stderr
| |