Namespaces
Variants

stdin, stdout, stderr

From cppreference.net
< c ‎ | io
Défini dans l'en-tête <stdio.h>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

Trois flux de texte sont prédéfinis. Ces flux sont implicitement ouverts et non orientés au démarrage du programme.

1) Associé au flux d' entrée standard , utilisé pour lire l'entrée conventionnelle. Au démarrage du programme, le flux est entièrement tamponné si et seulement si on peut déterminer que le flux ne fait pas référence à un dispositif interactif.
2) Associé au flux de sortie standard , utilisé pour écrire la sortie conventionnelle. Au démarrage du programme, le flux est entièrement tamponné si et seulement si on peut déterminer que le flux ne fait pas référence à un dispositif interactif.
3) Associé au flux d' erreur standard , utilisé pour écrire la sortie de diagnostic. Au démarrage du programme, le flux n'est pas entièrement tamponné.

Ce qui constitue un dispositif interactif est défini par l'implémentation.

Ces macros sont développées en expressions de type FILE * .

Table des matières

Notes

Bien que non imposée par POSIX, la convention UNIX est que stdin et stdout sont tamponnés par ligne s'ils sont associés à un terminal, et que stderr est non tamponné.

Ces macros peuvent être développées en lvalues modifiables. Si l'une de ces FILE * lvalue est modifiée, les opérations ultérieures sur le flux correspondant entraînent un comportement non spécifié ou indéfini.

Exemple

Cet exemple montre une fonction équivalente à printf .

#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);
}

Sortie possible :

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

Références

  • Norme C23 (ISO/IEC 9899:2024) :
  • 7.21.1 Introduction (p: TBD)
  • 7.21.2 Flux (p: TBD)
  • 7.21.2 Fichiers (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.21.1 Introduction (p : 217-218)
  • 7.21.2 Flux (p : 217-219)
  • 7.21.2 Fichiers (p : 219-221)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.21.1 Introduction (p: 296-298)
  • 7.21.2 Flux (p: 298-299)
  • 7.21.2 Fichiers (p: 300-302)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.19.1 Introduction (p : 262-264)
  • 7.19.2 Flux (p : 264-265)
  • 7.19.2 Fichiers (p : 266-268)
  • Norme C89/C90 (ISO/CEI 9899:1990) :
  • 7.9.1 Introduction
  • 7.9.2 Flux
  • 7.9.3 Fichiers

Voir aussi

type d'objet, capable de contenir toutes les informations nécessaires pour contrôler un flux d'E/S C
(typedef)
documentation C++ pour stdin , stdout , stderr