您可以使用fout指定在某些程序中计算出的值的文件,但是当您使用时,例如printf?这不是在命令行上打印的东西(但这就是cout的作用吗?)在我看来,printf会打印到文件,但是打印到哪个文件?
只是要注意我已经看到了'printf' vs. 'cout' in C++的帖子,但答案似乎都假设知道printf从根本上做了什么,这是我无法理解的。
对于某些输出操作,您必须指定要将输出发送到的文件/流。 fprintf
函数(来自C库)就是一个例子。它的第一个参数是FILE*
类型,它必须引用你打开的文件 - 或者一个默认的预打开文件。特定于C ++的std::cout << "hello\n"
是另一个例子; std::cout
是一个预先打开的输出流。
对于其他操作,例如printf
,输出所在的位置是隐含的。 printf(args...)
被定义为等同于fprintf(stdout, args...)
。
C stdout
(FILE*
类型)和C ++ std::cout
(源自std::basic_ostream
的类型)都指标准输出。这是一个在程序开始执行时由环境为您打开的输出流。
发送到标准输出的输出的实际位置取决于操作系统以及调用程序的方式。通常,默认情况下它将打印到当前终端窗口。 (在较旧的系统上,它可能是纯文本终端屏幕或硬拷贝终端。)并且大多数操作系统提供了重定向标准输出的方法,例如:
your_program > output.txt
要么
your_program | another_program
要么
your_program > /dev/null
这些(尝试)将输出发送到指定文件,发送到另一个程序的输入,或发送到丢弃发送给它的所有输入的设备。
但是当你刚才使用时,例如printf呢?
printf
输出到标准输出流。
这不会在命令行上打印
可能而且通常是的。 shell控制标准输出流到的位置。除非重定向输出,否则标准输出将显示在命令行中。
(但这是cout的作用吗?)
是。 std::cout
还打印到标准输出流。
要了解输入/输出流是什么,您可以从Single UNIX Specification中读取它。 UNIX不是C ++标准的一部分,但C ++标准使用相同的标准流概念。
流与外部文件(可能是物理设备)相关联......
...
在程序启动时,预定义了三个流,无需明确打开:标准输入(用于读取常规输入),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)...
†但不一定是物理设备,也不一定是存储在磁盘上的东西。