名前空間
変種
操作

stdin, stdout, stderr

From cppreference.com
< c‎ | io
 
 
ファイル入出力
型とオブジェクト
stdinstdoutstderr
        
関数
ファイルアクセス
(C95)
非書式化入出力
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

書式付き入力
直接入出力
書式付き出力
ファイルポジショニング
エラーハンドリング
ファイル操作
 
ヘッダー <stdio.h> で定義
#define stdin  /* 実装依存 */
(1)
#define stdout /* 実装依存 */
(2)
#define stderr /* 実装依存 */
(3)

3つのテキストストリームが事前定義されています。これらのストリームは、プログラム起動時に暗黙的に開かれ、未方向付けの状態です。

1) 標準入力ストリームに関連付けられ、通常の入力を読み取るために使用されます。プログラム起動時、ストリームが対話型デバイスを参照しないことが判明した場合にのみ、ストリームはフルバッファリングされます。
2) 標準出力ストリームに関連付けられ、通常の分析を出力するために使用されます。プログラム起動時、ストリームが対話型デバイスを参照しないことが判明した場合にのみ、ストリームはフルバッファリングされます。
3) 標準エラーストリームに関連付けられ、診断メッセージを出力するために使用されます。プログラム起動時、ストリームはフルバッファリングされません。

対話型デバイスが何であるかは、実装によって定義されます。

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

目次

[編集] 注意

POSIXで義務付けられていませんが、UNIXの慣例では、stdinstdoutは端末に関連付けられている場合はラインバッファリングされ、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の入出力ストリームを制御するために必要なすべての情報を保持できるオブジェクト型
(typedef) [編集]
C++ドキュメント (stdin, stdout, stderr)
English 日本語 中文(简体) 中文(繁體)