如何解决在同一个代码块中使用 printf 和 fprintf 是一个好习惯吗?
我记得听说在同一代码块中使用 printf()
和 fprintf()
函数是一种不好的做法。
fprintf(stdout,"The first line,\n");
printf("The second line,\n");
或者简单地说,
fprintf(somefile,"Its a file");
printf("Some text");
因此,我总是使用 fprintf()
和 fgets()
作为输入和输出。是我的错觉吗?
解决方法
它对程序语义没有影响(因为 printf
被定义为与 fprintf
相同,但插入了 stdout
),并且编译器应该处理 printf(…)
和fprintf(stdout,…)
相同。1
如果在使用 somefile
时编译器看不到 stdout
为 fprintf(somefile,"Its a file");
,可能会有一些影响。例如,在优化过程中,如果编译器知道 fprintf(somefile,"Its a file"); printf("Some text");
是 fputs("Its a fileSome text",stdout);
,它可能会将 somefile
优化为 stdout
。显然,如果它不知道 somefile
是 stdout
,则无法进行此优化。
除了这些担忧之外,问题只是人类行为之一 - 人类读者会更困惑还是更容易出现编辑错误或其他错误?我的评估是这些影响在这种情况下基本上是轻微的,但采用统一的风格会很好,例如如果有一些理由强调fprintf(stdout,…)
或制作代码时只使用stdout
灵活的编辑,将其更改为另一个流。
脚注
1 从技术上讲,C 标准允许编译器使用 printf(…)
和 fprintf(stdout,…)
做不同的事情,只要可观察行为满足规则,但它也允许编译器根据当前行号是偶数还是奇数做不同的事情,好的编译器不会。
像这样的风格问题往往是主观的,并且是徒劳的辩论的素材。
我会说
fprintf(stdout,"The first line,\n");
printf("The second line,\n");
风格很差。它令人分心,并且可能令人困惑。它会起作用,但它可能会给后来的读者留下错误的印象,可能暗示了一个错误。这有点像在单词中随机大写单词和字母。
如果您同时写入标准输出和文件,则代码如下
fprintf(somefile,"Its a file");
printf("Some text");
完全没问题。我无法想象为什么会有人反对这一点。
在我的 C 编程生涯早期,我认为将 printf
与其他输出函数混合使用是一种糟糕的风格。所以我会气馁
printf("Part of the first line");
if(condition) printf(",and the rest");
putchar('\n');
我更喜欢
printf("Part of the first line");
if(condition) printf(",and the rest");
printf("\n");
我有这个偏好的非常具体的原因,但这不是一个很好的理由,我已经放弃了。 (无论如何,混合 printf
和 putchar
并不是您要问的。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。