Namespaces
Variants

stdin, stdout, stderr

From cppreference.net
< c ‎ | io
헤더 파일에 정의됨 <stdio.h>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

세 개의 텍스트 스트림이 미리 정의되어 있습니다. 이러한 스트림들은 프로그램 시작 시 암묵적으로 열리고 방향성이 설정되지 않은 상태입니다.

1) standard input 스트림과 연관되어 있으며, 일반 입력을 읽는 데 사용됩니다. 프로그램 시작 시, 스트림이 대화형 장치를 참조하지 않는다고 판단될 경우에만 스트림이 완전히 버퍼링됩니다.
2) 표준 출력 스트림과 연관되어 있으며, 일반적인 출력을 작성하는 데 사용됩니다. 프로그램 시작 시, 스트림이 대화형 장치를 참조하지 않는다고 판단될 수 있는 경우에만 스트림이 완전히 버퍼링됩니다.
3) 표준 오류 스트림과 연관되어 있으며, 진단 출력을 작성하는 데 사용됩니다. 프로그램 시작 시 스트림은 완전히 버퍼링되지 않은 상태입니다.

인터랙티브 장치의 구성 요소는 구현에 따라 정의됩니다.

이 매크로들은 FILE * 타입의 표현식으로 확장됩니다.

목차

참고 사항

POSIX에서 의무화되지는 않았지만, UNIX 관례에 따르면 터미널과 연결된 stdin stdout 은 라인 버퍼링되며, stderr 는 버퍼링되지 않습니다.

이 매크로들은 수정 가능한 lvalue로 확장될 수 있습니다. 만약 이러한 FILE * lvalue 중 어느 하나라도 수정되면, 해당 스트림에 대한 후속 작업은 명시되지 않거나 정의되지 않은 동작을 초래합니다.

예제

이 예제는 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);
}

가능한 출력:

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

참조문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.21.1 서론 (p: TBD)
  • 7.21.2 스트림 (p: TBD)
  • 7.21.2 파일 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.21.1 서론 (p: 217-218)
  • 7.21.2 스트림 (p: 217-219)
  • 7.21.2 파일 (p: 219-221)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.21.1 서론 (p: 296-298)
  • 7.21.2 스트림 (p: 298-299)
  • 7.21.2 파일 (p: 300-302)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.19.1 서론 (p: 262-264)
  • 7.19.2 스트림 (p: 264-265)
  • 7.19.2 파일 (p: 266-268)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 7.9.1 서론
  • 7.9.2 스트림
  • 7.9.3 파일

참고 항목

C I/O 스트림을 제어하는 데 필요한 모든 정보를 담을 수 있는 객체 타입
(typedef)
C++ documentation for stdin , stdout , stderr