Namespaces
Variants

stdin, stdout, stderr

From cppreference.net
< cpp ‎ | io ‎ | c
ヘッダーで定義 <cstdio>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

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

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

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

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

注記

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

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

この例は、 std::printf に類似した関数を示しています。

#include <concepts>
#include <cstdio>
#include <type_traits>
template<typename T>
concept IsPrintable = std::integral<T> or std::floating_point<T> or std::is_pointer_v<T>;
int my_printf(char const* const format, IsPrintable auto const ... arguments)
{
    return std::fprintf(stdout, format, arguments...);
}
int main(int argv, char*[])
{
    my_printf("Strings and chars:\t%s %c\n", "hello", 'x');
    my_printf("Rounding:\t\t%f %.0f %.32f\n", 1.5, 1.5, 1.3);
    my_printf("Padding:\t\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5);
    my_printf("Scientific:\t\t%E %e\n", 1.5, 1.5);
    my_printf("Hexadecimal:\t\t%a %A 0x%X\n", 1.5, 1.5, &argv);
}

出力例:

Strings and chars:  hello x
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 0x2CFB41BC

関連項目

標準C入力ストリームから読み込む stdin
(グローバルオブジェクト)
標準C出力ストリームに書き込む stdout
(グローバルオブジェクト)
標準Cエラーストリームに書き込む stderr , バッファリングなし
(グローバルオブジェクト)
標準Cエラーストリームに書き込む stderr
(グローバルオブジェクト)
書式化された出力を stdout 、ファイルストリーム、またはバッファに出力する
(関数)
C I/Oストリームを制御するために必要なすべての情報を保持できるオブジェクト型
(typedef)
Cドキュメント for stdin , stdout , stderr