有什么理由要先打印NL,然后打印文本,然后手动将其与打印文本和NL进行比较?

时间:2018-09-20 07:19:32

标签: c file-io output

我最近需要调试一些真正古老的旧代码,主要是为某些微控制器设计的。

在此代码中,所有printf调用均遵循相同的约定:

fprintf(outfile, "\r\nFormat %d", someinteger);
fflush(outfile);

您可以看到,代码首先显示NL(CR,代码是由Win98资深人士编写的),然后显示文本。最后,他手动刷新文件(有时stdout,有时是正常的FILE*)。 据我所知,这很费力,因为打印\n已经刷新了句柄,所以下面的代码就足够了。

fprintf(outfile, "Format %d\r\n", someinteger);

\n暗示冲洗的第二个片段相比,有没有理由选择第一个片段来打印文本并手动冲洗手柄?

1 个答案:

答案 0 :(得分:2)

作为使用Fortran IV,K&R C和Unix V7牛奶喂养的古老恐龙,我可以理解此代码。

首字母\r\n确保在任何控制台模式下,光标都将定位在行的开头。作为一名经验丰富的串行控制台专家,我经常看到控制台处于原始模式,因为全屏(读取curses ...)程序崩溃了,并且无法恢复熟模式。而且我们必须键入stty sane ^J(是 Ctrl + J 而不是 Return ,后者仅发送了无用的^M)来恢复它。

如果可以将输出重定向到文件或管道,则fflush之后的\n仍然有意义。因为\n之后的自动刷新仅在输出直接到达终端时才发生(在Unix / Linux中),而不是在输出到文件或管道时才发生。因此,我想说的是,该代码假定可能在相当恶劣的环境中使用,并且会尽力确保文本可读。