Linus Torvalds: Java A Horrible Language
-
LOL ihr streitet euch um printf. Seit ihr 1978 stehen geblieben, es gibt mittlerweile wichtigere "Sprachfeatures".
-
tübisch schrieb:
LOL ihr streitet euch um printf. Seit ihr 1978 stehen geblieben, es gibt mittlerweile wichtigere "Sprachfeatures".
Ja, z.B. System.out.println();
-
printf ist tatsächlich eines der Dinge, die ich im C++ Standard vermisse. Ich bevorzuge zwar std::iostream aber für Formatierung ist das nicht gut geeignet. Da ist printf besser. Versucht mal eine Ausgabe wie:
3.14
4.67
12.12
334.34mit iostream-Mitteln hizubekommen. Klar kann man sich was bauen. Aber genau das ist das Problem: es ist nicht einfach nur da. Ich kann ja auch keinen Java-Anhänger von C++ überzeugen, indem ich ihm sage, er kann doch mit C++ Java bauen.
-
ich bins schrieb:
printf ist tatsächlich eines der Dinge, die ich im C++ Standard vermisse.
Ist es denn rausgeflogen?
-
Tim schrieb:
Ist es denn rausgeflogen?
Er meint vermutlich ein typsicheres Äquivalent zu printf.
-
ich bins schrieb:
printf ist tatsächlich eines der Dinge, die ich im C++ Standard vermisse. Ich bevorzuge zwar std::iostream aber für Formatierung ist das nicht gut geeignet. Da ist printf besser. Versucht mal eine Ausgabe wie:
3.14
4.67
12.12
334.34mit iostream-Mitteln hizubekommen. Klar kann man sich was bauen. Aber genau das ist das Problem: es ist nicht einfach nur da. Ich kann ja auch keinen Java-Anhänger von C++ überzeugen, indem ich ihm sage, er kann doch mit C++ Java bauen.
Genau, selbst Java hat printf.
-
Bei scanf verstehe ich es ja irgendwie noch, da hat man in bestimmten Situationen gewaltige Vorteile.
Aber printf ist doch wirklich gut ersetzbar.
-
scanf: Also leichter kann man BufferOverflows nicht zustande bringen...
-
Steffo schrieb:
scanf: Also leichter kann man BufferOverflows nicht zustande bringen...
Doch, mit gets.
-
Steffo schrieb:
scanf: Also leichter kann man BufferOverflows nicht zustande bringen...
Mit einem kleinen bischen mitdenken passiert das aber nicht.
-
Ethon schrieb:
Steffo schrieb:
scanf: Also leichter kann man BufferOverflows nicht zustande bringen...
Mit einem kleinen bischen mitdenken passiert das aber nicht.
Das ist bei scanf sehr schwer.
Prinzipiell tut man ja eher fgets machen und darauf dann sscanf. Da man sich sonst schwer tut buffer overflows zu verhinden...printf dagegen ist super.
-
ich bins schrieb:
Versucht mal eine Ausgabe wie:
3.14 4.67 12.12 334.34
mit iostream-Mitteln hizubekommen. Klar kann man sich was bauen.
Ich weiß nicht recht. Ist das so viel schlimmer, eine Zeile mit recht klar sprechenden Bezeichnern zusätzlich zu haben, anstatt einem Formatstring bei dem man die Bedeutung der einzelnen Felder auch erst einmal nachschlagen muss? Den C-testfall habe ich jedenfalls beim Programmieren spontan falsch gemacht, weil ich nicht sicher war, welche Bedeutung die erste Zahl genau hat und erst einmal nachschlagen musste. Ist daher wohl eher eine Sache davon, was man gewöhnt ist und was nicht:
#include <iostream> #include <iomanip> #include <cstdio> using namespace std; int main() { double numbers[] = {1.2, 1.234, 12.34, 123.4, 123.456, 12.3, 1.}; cout << "C++ Streams:\n"; cout << fixed << right << setprecision(3); for (unsigned i = 0; i < sizeof(numbers)/sizeof(*numbers); ++i) cout << setw(7) << numbers[i] << '\n'; puts("C I/O:"); for (unsigned i = 0; i < sizeof(numbers)/sizeof(*numbers); ++i) printf("%7.3f\n", numbers[i]); }
-
Ich finde printf schöner. (Und ich bin es bestimmt nicht mehr gewohnt. :p)
-
ich bins schrieb:
Versucht mal eine Ausgabe wie:
3.14
4.67
12.12
334.34mit iostream-Mitteln hizubekommen.
Ist doch ganz einfach:
cout << " 3.14"; cout << " 4.67"; cout << " 12.12"; cout << "334.34";
-
@Cooler Coder
-
Das ist noch nicht einmal richtig, aber keiner hat's gemerkt
.
-
Shade Of Mine schrieb:
Ethon schrieb:
Steffo schrieb:
scanf: Also leichter kann man BufferOverflows nicht zustande bringen...
Mit einem kleinen bischen mitdenken passiert das aber nicht.
Das ist bei scanf sehr schwer.
Prinzipiell tut man ja eher fgets machen und darauf dann sscanf. Da man sich sonst schwer tut buffer overflows zu verhinden...printf dagegen ist super.
Nochmal: Wo ist das Problem? Man gibt einfach maximale Stringlängen an, die dem Buffer entsprechen, und fertig.
-
Ethon schrieb:
Nochmal: Wo ist das Problem? Man gibt einfach maximale Stringlängen an, die dem Buffer entsprechen, und fertig.
Wo gibst du diese maximalen Stringlängen denn an?
-
Na so:
char buffer[256]; scanf("%255s", buffer);
-
Ethon schrieb:
Nochmal: Wo ist das Problem? Man gibt einfach maximale Stringlängen an, die dem Buffer entsprechen, und fertig.
Da bekommst du aber auch lustige Effekte. Beantworte zum Beispiel mal die Frage, wo der Lesezeiger steht, nachdem eine zu lange Eingabe kommt und was das für den weiteren Programmverlauf bedeutet.