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)

3つのテキストストリームが事前に定義されています。これらのストリームはプログラム起動時に暗黙的にオープンされ、方向性を持ちません。

1) 標準入力 ストリームに関連付けられ、通常の入力読み取りに使用されます。プログラム起動時、ストリームが対話型デバイスを参照しないと判断できる場合に限り、ストリームは完全にバッファリングされます。
2) standard output ストリームに関連付けられ、通常の出力を書き込むために使用されます。プログラム起動時、ストリームが対話型デバイスを参照していないと判断できる場合に限り、ストリームは完全にバッファリングされます。
3) 診断出力を書き込むために使用される standard error ストリームに関連付けられています。プログラム起動時、このストリームは完全にはバッファリングされていません。

インタラクティブデバイスを構成するものは実装定義です。

これらのマクロは型 FILE * の式に展開されます。

目次

注記

POSIXで義務付けられてはいませんが、UNIXの慣例では、 stdin stdout は端末に関連付けられている場合に行バッファリングされ、 stderr は非バッファリングとなります。

これらのマクロは変更可能な左辺値に展開される可能性があります。これらの FILE * 左辺値のいずれかが変更された場合、対応するストリームに対する後続の操作は未指定または未定義の動作を引き起こします。

この例は、 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