putchar()vs printf() - 有区别吗?

9 c printf putchar getchar

我目前在1.5.1文件复制中,并制作了一个类似的程序:

#include <stdio.h>

/* copy input to output; 1st version */
main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我像这样运行它:

PS <..loc..> cc copy-0.c
PS ./a
Black
Black
White
White
Gray
Gray
Run Code Online (Sandbox Code Playgroud)

输出是我输入的.

这是我为实验目的而制作的一个程序:

#include <stdio.h>

/* copy input to output; 1st version */
main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        printf("%c",c);
        c = getchar();
    }
}
Run Code Online (Sandbox Code Playgroud)

它产生相同的结果但是putchar和之间存在差异printf吗?

两者之间哪个更好用?

kir*_*sos 20

printf是一个通用打印功能,可以使用100种不同的格式说明符,并打印正确的结果字符串.putchar好吧,把一个角色放到屏幕上.这也意味着它可能要快得多.

回到问题:用于putchar打印单个字符.再说一次,它可能要快得多.

  • “putchar 把一个角色放到屏幕上”充其量是草率的,最糟糕的是一种严重的误解。缓冲输出函数对“屏幕”一无所知;他们完全没有注意到任何特定的硬件。`putc` 宏包含在流中插入字符的代码。这种抽象是*nix(受启发)操作系统和运行时库的美妙之处,也是您可以将一个程序的输出通过管道传输到另一个程序的输入,或者在没有任何物理终端的情况下运行服务器的原因。 (3认同)
  • 此外`putchar()` 更短。如果您正在打高尔夫球,In 可以提供帮助。 (2认同)

小智 5

我使用带有-S的printf("a")编译了一个示例,并在汇编代码中调用了putchar.看起来当printf中只有一个char时,编译器会将其转换为putchar().我用printf("ab")做了另一个例子,并调用了printf,并在%edi寄存器中显示了文本部分.

  • @AaronD此优化由Clang 3.0及更高版本和GCC 4.9及更高版本执行. (3认同)
  • 您使用的是哪个平台和编译器? (2认同)