putchar() et printf() - Est-il une différence?

Je suis actuellement dans le chapitre 1.5.1 la copie de Fichier et faites un programme comme suit:

#include <stdio.h>

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

    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}

Si j'ai couru comme ceci:

PS <..loc..> cc copy-0.c
PS ./a
Black
Black
White
White
Gray
Gray

La sortie est ce que j'ai saisie.

Et voici un programme que j'ai fait pour des fins expérimentales:

#include <stdio.h>

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

    c = getchar();
    while (c != EOF) {
        printf("%c",c);
        c = getchar();
    }
}

Il produit le même résultat, mais est-il une différence entre putchar et printf?

Ce qui est mieux entre les 2?

printf("%c, c); et putchar(c); ont un comportement identique dans cet exemple.
printf("%c, c) et putchar(c) le fonctionnement est le même que le retour de la valeur diffère - ce qui n'est pas utilisé dans cet exemple. putchar(c) sera certainement plus rapide que le printf("%c, c). Le degré de différence de vitesse est très dépendant de nombreux autres facteurs.
Pourquoi putchar être rapide et pourquoi putchar_unlocked est plus rapide?
Un compilateur optimisant peut émettre le même code pour printf("%c, c) et putchar(c) et donc pas de différence de performances dans ce cas. Avec un moins intelligents compilateur, putchar(c), avec sa simple fonctionnalité serait certainement plus rapide que printf("%c, c), bien que, sans le tester, et le degré de différence de vitesse est inconnu et peut être que marginale. putchar_unlocked() n'est pas une norme en fonction de la bibliothèque C - je suis pas familier avec les détails.

OriginalL'auteur | 2014-05-20