Namespaces
Variants

stdin, stdout, stderr

From cppreference.net
< c ‎ | io
Definiert im Header <stdio.h>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

Drei Textströme sind vordefiniert. Diese Ströme werden beim Programmstart implizit geöffnet und sind unorientiert.

1) Verbunden mit dem standard input -Stream, verwendet zum Lesen konventioneller Eingaben. Beim Programmstart ist der Stream vollständig gepuffert, genau dann wenn festgestellt werden kann, dass der Stream nicht auf ein interaktives Gerät verweist.
2) Verbunden mit dem standard output -Stream, verwendet zum Schreiben von konventioneller Ausgabe. Beim Programmstart ist der Stream vollständig gepuffert, genau dann wenn festgestellt werden kann, dass der Stream nicht auf ein interaktives Gerät verweist.
3) Verbunden mit dem standard error -Stream, verwendet zum Schreiben von Diagnoseausgaben. Beim Programmstart ist der Stream nicht vollständig gepuffert.

Was ein interaktives Gerät ausmacht, ist implementierungsdefiniert.

Diese Makros werden zu Ausdrücken vom Typ FILE * expandiert.

Inhaltsverzeichnis

Hinweise

Obwohl nicht von POSIX vorgeschrieben, ist es nach UNIX-Konvention üblich, dass stdin und stdout zeilengepuffert sind, wenn sie mit einem Terminal verbunden sind, und stderr ungepuffert ist.

Diese Makros können zu modifizierbaren L-Werten expandiert werden. Wenn einer dieser FILE * L-Werte modifiziert wird, führen nachfolgende Operationen auf dem entsprechenden Stream zu nicht spezifiziertem oder undefiniertem Verhalten.

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

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.21.1 Einführung (S.: TBD)
  • 7.21.2 Streams (S.: TBD)
  • 7.21.2 Dateien (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.21.1 Einführung (S: 217-218)
  • 7.21.2 Streams (S: 217-219)
  • 7.21.2 Dateien (S: 219-221)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.21.1 Einführung (S: 296-298)
  • 7.21.2 Streams (S: 298-299)
  • 7.21.2 Dateien (S: 300-302)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.19.1 Einführung (S: 262-264)
  • 7.19.2 Streams (S: 264-265)
  • 7.19.2 Dateien (S: 266-268)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 7.9.1 Einführung
  • 7.9.2 Streams
  • 7.9.3 Dateien

Siehe auch

Objekttyp, der alle Informationen zur Steuerung eines C-I/O-Streams halten kann
(typedef)
C++-Dokumentation für stdin , stdout , stderr