我应该使用printf(" \ n")还是putchar(' \ n')在C中打印换行符?

时间:2015-12-11 19:50:07

标签: c

当我用C编写程序时,我经常需要自己打印换行符。我知道你可以通过至少两种方式做到这一点:printf("\n")putchar('\n'),但我不确定哪种方式在风格和效率方面是最佳选择。是否有使用其中一种的最佳实践?这真的很重要吗?

6 个答案:

答案 0 :(得分:20)

如果您使用现代编译器 [1] ,那么您选择的是哪一个没有区别。以下面的C代码为例。

#include <stdlib.h>
#include <stdio.h>

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是一个现代编译器。

答案 1 :(得分:9)

  

是否有使用其中一种的最佳做法?

让风格推动决策。

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

如果该函数有很多printf(),请留在printf("\n")

同样适用于putchar('\n')puts("")

答案 2 :(得分:5)

这并不重要。在功能选择或效率方面,我从来没有遇到过打印到控制台的情况,对某人来说无关紧要。

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:3)

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

答案 5 :(得分:3)

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