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
Vous devez vous connecter pour publier un commentaire.
printf
est un générique de la fonction d'impression qui fonctionne avec plus de 100 différents spécificateurs de format et imprime le résultat de la chaîne.putchar
, bien, met un personnage à l'écran. Cela signifie aussi qu'il est probablement beaucoup plus rapide.Revenir à la question: utiliser
putchar
pour imprimer un caractère unique. Encore une fois, c'est probablement beaucoup plus rapide.putchar()
est plus courte. Dans peut vous aider si vous êtes le golf.OriginalL'auteur kirbyfan64sos
J'ai compilé un exemple d'utilisation de printf("un") avec-S et a obtenu l'appel putchar dans le code assembleur.
Lorsque vous avez un seul caractère dans le printf, le compilateur transforme en un putchar().
J'ai fait un autre exemple d'utilisation de printf("ab") et a obtenu l'appel de printf, avec le texte de l'article dans l' %edi registre.
Cette optimisation est effectuée par Clang 3.0 et jusqu', et GCC 4.9.
OriginalL'auteur user5181136
printf vous permet de chaînes de format, de manière compliquée, la substitution des choses comme les nombres entiers et décimaux et sur d'autres chaînes.
getchar et putchar obtenir et de mettre des personnages
Je peux dire que printf est plus utile de plusieurs façons, par rapport à putchar.
Mieux de regarder dans leurs pages de manuel ( man 3 printf man 3 putchar ) dans le terminal
OriginalL'auteur jt25
C'est pourquoi, lorsque vous souhaitez afficher uniquement un caractère sur l'écran de l'utilisation putchar.
Pour lire une chaîne de caractères utilisez obtient la fonction.
Pour afficher chaîne de caractères, vous pouvez utiliser puts() ou printf deux.
OriginalL'auteur
La différence est que
putchar
imprime un caractère alors queprintf
pouvez imprimer beaucoup plus.Généralement lorsque vous imprimez quelque chose pour le terminal que vous voulez à la fin avec un caractère de saut de ligne,
'\n'
. À tout le moins, pour cette raison, je conseilleprintf
que vous pouvez écrireau lieu de
putchar
appels semblent mieux, et même pas trop détaillé ici. Plus facile à lire, trop.OriginalL'auteur Tommy Ivarsson