stdin, stdout, stderr
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <stdio.h> で定義
|
||
#define stdin /* implementation-defined */ |
(1) | |
#define stdout /* implementation-defined */ |
(2) | |
#define stderr /* implementation-defined */ |
(3) | |
3つのテキストストリームは定義済みです。 これらのストリームはプログラムのスタートアップで暗黙的に開かれ、無指向です。
1) 標準入力ストリームに関連つけられ、慣習の入力を読み取るために使用されます。 プログラムのスタートアップでは、このストリームは対話型デバイスを参照していないと確認できる場合のみで完全バッファリングされます。
2) 標準出力ストリームに関連つけられ、慣習の出力を書き込むために使用されます。 プログラムのスタートアップでは、このストリームは対話型デバイスを参照していないと確認できる場合のみで完全バッファリングされます。
3) 標準エラーストリームに関連つけられ、診断出力を書き込むために使用されます。 プログラムのスタートアップでは、このストリーム完全バッファリングされません。
何が対話型デバイスを構成するのは処理系定義です。
これらのマクロは FILE* 型の式に展開されます。
ノート
POSIX に強制されていませんが、 UNIX の慣例は stdin と stdout が終端に関連付けられた場合では行バッファリングされて、 stderr がバッファリングなしとなります。
これらのマクロは変更可能な左辺値に展開されるかもしれません。 上記の FILE* 左辺値がどれ一つ変更された場合でも、対応するストリームにおける以降の操作は未規定または未定義な動作をもたらします。
例
この例は printf に同等な関数を示します。
Run this code
#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
参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.21.1 Introduction (p: 296-298)
- 7.21.2 Streams (p: 298-299)
- 7.21.2 Files (p: 300-302)
- C99 standard (ISO/IEC 9899:1999):
- 7.19.1 Introduction (p: 262-264)
- 7.19.2 Streams (p: 264-265)
- 7.19.2 Files (p: 266-268)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.9.1 Introduction
- 4.9.2 Streams
- 4.9.3 Files
関連項目
stdin, stdout, stderr の C++リファレンス
|