我应该使用printf(“\ n”)还是putchar(’\ n’)在C中打印换行符?
当我用C编写程序时,我经常需要自己打印一个换行符。 我知道你可以用至少两种方式做到这一点: printf("\n")
和putchar('\n')
,但我不确定哪种方式在风格和效率方面是最佳选择。 是否有使用其中一种的最佳实践? 真的有关系吗?
如果你使用现代编译器[1] ,那么你选择哪一个没有区别。 以下面的C代码为例。
#include #include void foo(void) { putchar('\n'); } void bar(void) { printf("\n"); }
使用gcc -O1
(已启用优化)编译时,我们在foo
和bar
中都获得以下(相同)机器代码:
movl $10, %edi popq %rbp jmp _putchar ## TAILCALL
foo
和bar
调用putchar('\n')
。 换句话说,现代C编译器非常智能,可以非常有效地优化printf
调用。 只需使用您认为更清晰可读的任何一个。
- 我不认为MS的
cl
是一个现代的编译器。
是否有使用其中一种的最佳实践?
让风格推动决策。
由于执行效率相同或几乎相同,因此请使用最能传达较大代码function的样式。
如果函数有很多printf()
,请使用printf("\n")
。
同样对于putchar('\n')
和puts("")
这并不重要。 我从来没有遇到一个案例,打印到控制台对于某些人而言,无论是function选择还是效率。
printf
和putchar
都是stdio函数,因此它们都写入相同的FILE
句柄(而不是直接写入文件描述符)。
但是, printf
要重得多,因为第一个参数是需要扫描替换表达式和转义的格式字符串。
因此, printf("\n")
和putchar('\n')
都会做同样的事情,但后者会更快。
printf要慢得多,因为格式字符串在运行时被解析。 当然,平均的家庭作业程序或简单的Project Euler解决方案非常小,无论如何浪费几个CPU周期并不重要。
我会选择putchar
因为printf
的字符串需要被解析。 应该稍快一些 – 但可能不是很多。