我应该使用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 (已启用优化)编译时,我们在foobar中都获得以下(相同)机器代码:

 movl $10, %edi popq %rbp jmp _putchar ## TAILCALL 

foobar调用putchar('\n') 。 换句话说,现代C编译器非常智能,可以非常有效地优化printf调用。 只需使用您认为更清晰可读的任何一个。


  1. 我不认为MS的cl是一个现代的编译器。

是否有使用其中一种的最佳实践?

让风格推动决策。

由于执行效率相同或几乎相同,因此请使用最能传达较大代码function的样式。

如果函数有很多printf() ,请使用printf("\n")

同样对于putchar('\n')puts("")

这并不重要。 我从来没有遇到一个案例,打印到控制台对于某些人而言,无论是function选择还是效率。

printfputchar都是stdio函数,因此它们都写入相同的FILE句柄(而不是直接写入文件描述符)。

但是, printf要重得多,因为第一个参数是需要扫描替换表达式和转义的格式字符串。

因此, printf("\n")putchar('\n')都会做同样的事情,但后者会更快。

printf要慢得多,因为格式字符串在运行时被解析。 当然,平均的家庭作业程序或简单的Project Euler解决方案非常小,无论如何浪费几个CPU周期并不重要。

我会选择putchar因为printf的字符串需要被解析。 应该稍快一些 – 但可能不是很多。