Namensräume
Varianten
Aktionen

stdin, stdout, stderr

Von cppreference.com
< c‎ | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
stdinstdoutstderr
        
Funktionen
Datei-Zugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Operationen auf Dateien
 
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.

#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) [bearbeiten]
C++ Dokumentation für stdin, stdout, stderr