微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在同一个代码块中使用 printf 和 fprintf 是一个好习惯吗?

如何解决在同一个代码块中使用 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 时编译器看不到 stdoutfprintf(somefile,"Its a file");,可能会有一些影响。例如,在优化过程中,如果编译器知道 fprintf(somefile,"Its a file"); printf("Some text");fputs("Its a fileSome text",stdout);,它可能会将 somefile 优化为 stdout。显然,如果它不知道 somefilestdout,则无法进行此优化。

除了这些担忧之外,问题只是人类行为之一 - 人类读者会更困惑还是更容易出现编辑错误或其他错误?我的评估是这些影响在这种情况下基本上是轻微的,但采用统一的风格会很好,例如如果有一些理由强调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");

我有这个偏好的非常具体的原因,但这不是一个很好的理由,我已经放弃了。 (无论如何,混合 printfputchar 并不是您要问的。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。