warum "cout" und nicht "printf"
lima-city → Forum → Programmiersprachen → C/C++ und D
ausgabe
beispiel
code
compiler
datum
funktion
grund
guru
http
klasse
laufzeit
operator
schnitzer
sortierte liste
string
tatsache
url
wahrscheinlich schreiben
wall
warnstufe
-
mir ist aufgefallen, dass in c++ (c hat ja glaub ich nur printf...???) viele lieber cout verwenden statt printf... gibt es da einen grund?? ich find e printf viel angenehmer... oder gibt es bestimmmte vorteile gegenüber printf?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
cout nimmt vor dem ausschreiben irgendeine ominöse überprüfung vor, printf tut das nicht, trotzdem ist cout nicht langsamer als printf. cout ist ausserdem neuer und nicht wahrscheinlich schreiben "große" c-gurus ihre Lehrbücher nicht umsonst nur noch mit cout und cin.
Hoffe ich konnte dir damitweiterhelfen ;).
Mfg,
sharesoft
Beitrag zuletzt geändert: 24.1.2011 19:31:08 von sharesoft -
Streams sind objektorientiert. Außerdem sind sie sicherer als printf. Siehe auch: http://cplusplus.com/reference/iostream/
Und C hat auch noch andere Funktionen zur Ein- und Ausgabe: http://www.cppreference.com/wiki/io/c/start
Beitrag zuletzt geändert: 24.1.2011 20:27:13 von bladehunter -
Hallo ahref,
die Gründe, warum in C++ häufiger cout als printf() anzutreffen ist, sind vielfältig. Einer der wichtigsten scheint mir zu sein, das mancher C++-Guru ein echter Idealist ist und printf schon deshalb ablehnt, weil es das schon in C gab
Ein pragmatischer Grund für den Einsatz von cin/cout bzw. den Streaming-Klassen ist die Tatsache, das die Streaming-Operatoren überladen werden können. D.h. während man mit printf() die Ausgabe jedes mal selber zusammenstöpseln muss, kann man für eine bestimmte Klasse den '<<'-Operator so überladen, dass z.B.
MyClass c; std::cout << c << std::endl;
automatisch die gewünschte Ausgabe erzeugt. Das spart in erster Linie Schreibarbeit.
Ein anderer Punkt ist, dass printf() immer nach stdout schreibt. Mit Hilfe der Streaming-Operatoren kann man aber auch aus Objekten lesen und auf Objekte schreiben. In C++ wäre z.B. folgendes machbar:
cin >> unsorted_list; sorted_list << sort << unsorted_list; cout << sorted_list;
Hier würden zuerst unsortierte Daten in eine Liste eingelesen. Dann liest 'sort' die Daten aus 'unsorted_list' und sortiert diese. 'sorted_list' liest dann die sortierten Daten aus sort. Am Ende wird die sortierte Liste ausgegeben.
Sowas ist mit printf() natürlich nicht machbar.
Andererseits kommt es auch vor, das einige Toolkits bei String-Klassen eine printf-Funktion implementieren (z.B. wxWidgets). Also bist Du nicht der einzige, der die Einfachheit von printf zu schätzen weis. Wenn Dir printf zusagt und Du die anderen Möglichkeiten zur Zeit nicht brauchst, dann kannst Du ganz beruhigt bei printf bleiben.
-
printf übernimmt keine Typüberpfüfung der eingegebenen Parameter und ist somit fehleranfälliger. So ist es zum Beispiel möglich, bei printf folgendes einzugeben:
int n = 10000; printf("%s", n);
Obwohl man hier einen int übergibt, versucht die printf-Anweisung diesen als string zu interprtieren, was vom Compiler jedoch nicht abgefangen wird, sondern erst zur Laufzeit zu einem Fehler führt.
Göran -
Hallo goeranbarz,
mit der Typprüfung gebe ich Dir grundsätzlich recht.
Aber bei gcc und MS VC++ führt sowas im Normalfall zu einer Compiler-Warnung (zumindest mit -Wall bzw. Warnstufe 3) von daher bekommt man solche Schnitzer meistens schnell mit.
Und meistens testet man die Anwendung auch und da merkt man es doch wenn nur Müll auf der Konsole steht und man eine Meldung über eine Heap-Corruption bekommt.
Beitrag zuletzt geändert: 30.1.2011 19:16:03 von darkpandemic -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage