名前空間
変種
操作

stdin, stdout, stderr

提供: cppreference.com
< cpp‎ | io‎ | c
 
 
入出力ライブラリ
入出力マニピュレータ
Cスタイルの入出力
バッファ
(C++98で非推奨)
ストリーム
抽象
ファイル入出力
文字列入出力
配列入出力
(C++98で非推奨)
(C++98で非推奨)
(C++98で非推奨)
同期化出力
エラーカテゴリインタフェース
(C++11)
 
C スタイルの入出力
型とオブジェクト
stdinstdoutstderr
関数
ファイルアクセス
直接入出力
書式なし入出力
書式付き入力
 
ヘッダ <cstdio> で定義
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

3つのテキストストリームは定義済みです。 これらのストリームはプログラムのスタートアップで暗黙的に開かれ、無指向です。

1) 標準入力ストリームに関連つけられ、慣習の入力を読み取るために使用されます。 プログラムのスタートアップでは、このストリームは対話型デバイスを参照していないと確認できる場合のみで完全バッファリングされます。
2) 標準出力ストリームに関連つけられ、慣習の出力を書き込むために使用されます。 プログラムのスタートアップでは、このストリームは対話型デバイスを参照していないと確認できる場合のみで完全バッファリングされます。
3) 標準エラーストリームに関連つけられ、診断出力を書き込むために使用されます。 プログラムのスタートアップでは、このストリーム完全バッファリングされません。

何が対話型デバイスを構成するのは処理系定義です。

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

[編集] ノート

POSIX に強制されていませんが、 UNIX の慣例は stdinstdout が終端に関連付けられた場合では行バッファリングされて、 stderr がバッファリングなしとなります。

これらのマクロは変更可能な左辺値に展開されるかもしれません。 上記の std::FILE* 左辺値がどれ一つ変更された場合でも、対応するストリームにおける以降の操作は未規定または未定義な動作をもたらします。

[編集]

この例は std::printf に同等な関数を示します。

#include <cstdarg>
#include <cstdio>
 
int my_printf(const char * fmt, ...)
{
    std::va_list vl;
    va_start(vl, fmt);
    int ret = std::vfprintf(stdout, fmt, vl);
    va_end(vl);
    return ret;
}
 
int main()
{
    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

[編集] 関連項目

標準 C 入力ストリーム stdin から読み込みます
(グローバルオブジェクト) [edit]
標準 C 出力ストリーム stdout に書き込みます
(グローバルオブジェクト) [edit]
標準 C エラーストリーム stderr に書き込みます。 バッファリングされません
(グローバルオブジェクト) [edit]
標準 C エラーストリーム stderr に書き込みます
(グローバルオブジェクト) [edit]
stdin, stdout, stderrC言語リファレンス