Namespaces
Variants

stdin, stdout, stderr

From cppreference.net
< c ‎ | io
Definido en el encabezado <stdio.h>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

Tres flujos de texto están predefinidos. Estos flujos se abren implícitamente y no están orientados al inicio del programa.

1) Asociado con el flujo de entrada estándar , utilizado para leer la entrada convencional. Al inicio del programa, el flujo está completamente almacenado en búfer si y solo si se puede determinar que el flujo no se refiere a un dispositivo interactivo.
2) Asociado con el flujo de salida estándar , utilizado para escribir salida convencional. Al inicio del programa, el flujo está completamente almacenado en búfer si y solo si se puede determinar que el flujo no se refiere a un dispositivo interactivo.
3) Asociado con el flujo de error estándar , utilizado para escribir salida de diagnóstico. Al inicio del programa, el flujo no está completamente almacenado en búfer.

Lo que constituye un dispositivo interactivo está definido por la implementación.

Estas macros se expanden a expresiones de tipo FILE * .

Contenidos

Notas

Aunque no está mandatado por POSIX, la convención UNIX es que stdin y stdout tengan búfer por líneas si están asociados a un terminal y stderr no tenga búfer.

Estas macros pueden expandirse a lvalues modificables. Si cualquiera de estos FILE * lvalue es modificado, operaciones posteriores en el flujo correspondiente resultan en comportamiento no especificado o indefinido.

Ejemplo

Este ejemplo muestra una función equivalente a 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);
}

Salida posible:

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

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.21.1 Introducción (p: TBD)
  • 7.21.2 Flujos (p: TBD)
  • 7.21.2 Archivos (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.21.1 Introducción (p: 217-218)
  • 7.21.2 Flujos (p: 217-219)
  • 7.21.2 Archivos (p: 219-221)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.21.1 Introducción (p: 296-298)
  • 7.21.2 Flujos (p: 298-299)
  • 7.21.2 Archivos (p: 300-302)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.19.1 Introducción (p: 262-264)
  • 7.19.2 Flujos (p: 264-265)
  • 7.19.2 Archivos (p: 266-268)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 7.9.1 Introducción
  • 7.9.2 Flujos
  • 7.9.3 Archivos

Véase también

tipo de objeto, capaz de contener toda la información necesaria para controlar un flujo de E/S de C
(typedef)
C++ documentation para stdin , stdout , stderr