stdin, stdout, stderr
來自 cppreference.com
| 定義於標頭檔案 <cstdio> |
||
| #define stdin /* implementation-defined */ |
(1) | |
| #define stdout /* implementation-defined */ |
(2) | |
| #define stderr /* implementation-defined */ |
(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 (全域性物件) | |
| (C++11) |
將格式化輸出列印到 stdout、檔案流或緩衝區 (函式) |
| 物件型別,能夠儲存控制 C I/O 流所需的所有資訊 (typedef) | |
| C 文件 關於 stdin, stdout, stderr
| |