putchar() vs printf() – Gibt es einen Unterschied?
Lesezeit: 4 Minuten
Ich bin gerade in Kapitel 1.5.1 Datei kopieren und habe ein Programm wie folgt erstellt:
#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Wenn ich es so laufen lasse:
PS <..loc..> cc copy-0.c
PS ./a
Black
Black
White
White
Gray
Gray
Die Ausgabe ist das, was ich eingebe.
Und hier ist ein Programm, das ich zu experimentellen Zwecken erstellt habe:
#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
printf("%c",c);
c = getchar();
}
}
Es erzeugt das gleiche Ergebnis, aber gibt es einen Unterschied zwischen putchar und printf?
Was ist besser zwischen den 2 zu verwenden?
printf("%c, c); und putchar(c); haben in diesem Beispiel identisches Verhalten.
– MM
20. Mai 2014 um 2:35 Uhr
printf("%c, c) und putchar(c) Funktion die gleiche, außer dass sich der Rückgabewert unterscheidet – der in diesem Beispiel nicht verwendet wird. putchar(c) wird sicherlich schneller als ausführen printf("%c, c). Der Grad der Geschwindigkeitsdifferenz hängt stark von vielen anderen Faktoren ab.
– chux – Wiedereinsetzung von Monica
20. Mai 2014 um 18:25 Uhr
@chux Warum wäre putchar schnell und warum ist putchar_unlocked schneller?
– Suraj Jain
4. März 2017 um 9:30 Uhr
@SurajJain Ein optimierender Compiler kann denselben Code für ausgeben printf("%c, c) und putchar(c) und daher kein Leistungsunterschied in diesem Fall. Mit einem weniger intelligenten Compiler putchar(c)mit seiner einfachen Funktionalität wäre sicherlich schneller als printf("%c, c)obwohl ohne Tests der Grad der Geschwindigkeitsdifferenz unbekannt ist und marginal sein kann. putchar_unlocked() ist keine Standard-C-Bibliotheksfunktion – ich bin mit ihren Details nicht vertraut.
– chux – Wiedereinsetzung von Monica
4. März 2017 um 16:18 Uhr
kirbyfan64sos
printf ist eine generische Druckfunktion, die mit 100 verschiedenen Formatbezeichnern arbeitet und die richtige Ergebniszeichenfolge druckt. putchar, nun ja, bringt einen Charakter auf den Bildschirm. Das bedeutet auch, dass es wahrscheinlich viel schneller ist.
Zurück zur Frage: nutzen putchar um ein einzelnes Zeichen zu drucken. Auch hier ist es wahrscheinlich viel schneller.
Ebenfalls putchar() ist kürzer. In kann helfen, wenn Sie Golf spielen.
– aloisdg
16. Juli 2016 um 21:23 Uhr
“putchar bringt einen Charakter auf den Bildschirm” ist bestenfalls schlampig und schlimmstenfalls ein schweres Missverständnis. Die gepufferten Ausgabefunktionen wissen nichts von “Bildschirmen”; Sie sind sich jeglicher spezifischer Hardware völlig unbewusst. Das putc Makro enthält Code, der ein Zeichen in einen Stream einfügt. Diese Abstraktion ist die Schönheit der *nix (inspirierten) Betriebssysteme und Laufzeitbibliotheken und der Grund, warum Sie die Ausgabe eines Programms an die Eingabe eines anderen leiten oder Server ohne physische Terminals ausführen können.
– Peter – Setzen Sie Monica wieder ein
24. Mai 2019 um 13:16 Uhr
Benutzer5181136
Ich habe ein Beispiel mit kompiliert printf("a") mit -S und Anruf bekommen putchar im Assemblercode.
Sieht so aus, als hätten Sie nur ein Zeichen in der printf der Compiler macht daraus eine putchar().
Ich habe ein weiteres Beispiel mit gemacht printf("ab") und Anruf bekommen printfmit dem Textabschnitt im %edi-Register.
Welche Plattform und welchen Compiler hast du verwendet?
– Aaron D
1. August 2015 um 16:54 Uhr
@AaronD Diese Optimierung wird von Clang 3.0 und höher und GCC 4.9 und höher durchgeführt.
– kirbyfan64sos
18. Oktober 2015 um 19:25 Uhr
Putchar : gibt nur ein einzelnes Zeichen auf dem Bildschirm aus, wie die Syntax sagt.
Printf : printf Zeile oder Wort auf dem Bildschirm. Wenn Sie also nur ein Zeichen auf dem Bildschirm anzeigen möchten, verwenden Sie putchar. Um einen String zu lesen, verwenden Sie die Funktion gets. Um eine Zeichenfolge anzuzeigen, können Sie sowohl puts() als auch printf verwenden.
Tommi Ivarsson
Der Unterschied ist das putchar druckt ein Zeichen, während printf kann viel mehr drucken.
printf("%s\n", "this is a lot longer than one character");
Wenn Sie etwas an das Terminal drucken, möchten Sie es im Allgemeinen mit einem Zeilenumbruchzeichen beenden. '\n'. Zumindest aus diesem Grund würde ich die Verwendung empfehlen printf wie du dann schreiben kannst
printf("%c\n", c);
Anstatt von
putchar(c);
putchar('\n');
Mit printf können Sie Zeichenfolgen auf komplizierte Weise formatieren, indem Sie Dinge wie Ganzzahlen und Floats und andere Zeichenfolgen ersetzen.
getchar und putchar erhalten und setzen Zeichen
Ich kann sagen, dass printf im Vergleich zu putchar in vielerlei Hinsicht nützlicher ist.
Schauen Sie besser in den entsprechenden Handbuchseiten ( man 3 printf man 3 putchar ) im Terminal nach
14328700cookie-checkputchar() vs printf() – Gibt es einen Unterschied?yes
printf("%c, c);
undputchar(c);
haben in diesem Beispiel identisches Verhalten.– MM
20. Mai 2014 um 2:35 Uhr
printf("%c, c)
undputchar(c)
Funktion die gleiche, außer dass sich der Rückgabewert unterscheidet – der in diesem Beispiel nicht verwendet wird.putchar(c)
wird sicherlich schneller als ausführenprintf("%c, c)
. Der Grad der Geschwindigkeitsdifferenz hängt stark von vielen anderen Faktoren ab.– chux – Wiedereinsetzung von Monica
20. Mai 2014 um 18:25 Uhr
@chux Warum wäre putchar schnell und warum ist putchar_unlocked schneller?
– Suraj Jain
4. März 2017 um 9:30 Uhr
@SurajJain Ein optimierender Compiler kann denselben Code für ausgeben
printf("%c, c)
undputchar(c)
und daher kein Leistungsunterschied in diesem Fall. Mit einem weniger intelligenten Compilerputchar(c)
mit seiner einfachen Funktionalität wäre sicherlich schneller alsprintf("%c, c)
obwohl ohne Tests der Grad der Geschwindigkeitsdifferenz unbekannt ist und marginal sein kann.putchar_unlocked()
ist keine Standard-C-Bibliotheksfunktion – ich bin mit ihren Details nicht vertraut.– chux – Wiedereinsetzung von Monica
4. März 2017 um 16:18 Uhr