gpt4 book ai didi

c - 与打印文本和 NL 相比,先打印 NL,然后打印文本,然后手动刷新的任何原因?

转载 作者:行者123 更新时间:2023-12-04 09:34:06 26 4
gpt4 key购买 nike

我最近需要调试一些非常古老的遗留代码,主要是为某些微 Controller 设计的。

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

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

可以看到,代码先打印了一个NL(还有一个CR,代码是Win98老手写的),然后是文本。最后,他手动刷新文件(有时是 stdout,有时是普通的 FILE*)。据我所知,这很费力,因为打印 \n 已经刷新了句柄,所以下面的代码就足够了。

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

\n 隐含刷新的第二个代码段相比,是否有任何理由选择第一个代码段来打印文本并手动刷新句柄?

最佳答案

作为用 Fortran IV、K&R C 和 Unix V7 牛奶喂养的老恐龙,我能看懂这段代码。

初始 \r\n 确保无论控制台模式如何,光标都将定位在一行的开头。作为串行线路控制台的老手,我经常看到控制台处于原始模式,因为全屏(阅读诅咒......)程序崩溃并且无法恢复熟化模式。我们必须输入 stty sane ^J(是 Ctrl + J 而不是 Return ,后者只会发送无用的 ^M) 来恢复它。

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

关于c - 与打印文本和 NL 相比,先打印 NL,然后打印文本,然后手动刷新的任何原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52419661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com