The Daily WTF
-
Power Off schrieb:
Das sagst Du. Tippfehler macht jeder mal, und dann findet er se nimmer.
aber es ist doch unfug, code zu bauen, der tippfehler vermeidet, die man nicht machen würde, wenn man nicht den tippfehlervermeidenden code bauen müßte.
Power Off schrieb:
Haette er einen gekennzeichneten Müll verwendet, waere ihm spaetens beim Tippen des "?" oder beim Lesen spaeter aufgefallen, dass da "=" statt "==" steht.
in den rechten teil einer initialisierung schreibt man keine vergleichsoperatoren rein, tue ich wenigstens nicht.
-
volkard schrieb:
Power Off schrieb:
Walli schrieb:
Apropos Quark: Wofür war das void in den Klammern gleich noch da?
In ANSI C++ besagt es, dass eine Funktion keine Parameter hat. Stelle im Standard kannst Dir selber raussuchen.
ist das die sprache, in der man
int& blockHead( void ) { return boink; }
schreiben kann?
warum benutzt du ANSI C++ und nicht DIN C++ wie die ganzen anderen?
und warum schreibste nicht einfachint& blockHead() { return boink; }
also warum das void?
ANSI/ISO/DIN/BS C++ : alles dasselbe.
volkard schrieb:
also warum das void?
Weil's im Standard eingefuehrt wurde, damit niemand mehr leere Parameterlisten ohne "void" schreibt.
-
volkard schrieb:
in den rechten teil einer initialisierung schreibt man keine vergleichsoperatoren rein, tue ich wenigstens nicht.
Hm.
-
Weil's im Standard eingefuehrt wurde, damit niemand mehr leere Parameterlisten ohne "void" schreibt.
Nope. Ganz im Gegenteil musste man in C void reinschreiben, andernfalls war es eine variable Anzahl von Parametern. In C++ wird dies jetzt anders gehandhabt, damit foo() eine sinnvolle Bedeutung, nämlich keine Parameter hat. Wär sonst ein bisschen affig void hinschreiben zu müssen. foo(int) heißt ein Parameter, foo(bool) heißt ein Parameter, foo(string) heißt ein Parameter, foo(void*) heißt ein Parameter, foo(void) heißt 0 Parameter *Kopfschuss*.
-
Mit TomasRiker haben wir es hier aber nicht zum erneuten Male zu tun, oder?
MfG SideWinder
-
Optimizer schrieb:
In C++ wird dies jetzt anders gehandhabt, damit foo() eine sinnvolle Bedeutung, nämlich keine Parameter hat. Wär sonst ein bisschen affig void hinschreiben zu müssen. foo(int) heißt ein Parameter, foo(bool) heißt ein Parameter, foo(string) heißt ein Parameter, foo(void*) heißt ein Parameter, foo(void) heißt 0 Parameter *Kopfschuss*.
Du bist auf dem Holzweg. In C++ wurde zuerst "foo()" geschrieben, heute "foo(void)". Damit ist man dem ANSI C Standard gefolgt.
-
volkard schrieb:
in den rechten teil einer initialisierung schreibt man keine vergleichsoperatoren rein, tue ich wenigstens nicht.
Ich finde, dass man so extrem nicht sein muss. Sowas wie
bool kannSpäterVertauschtWerden = (a > b)
ist doch völlig in Ordnung. Auch ein == finde ich in Ordnung, man braucht sich natürlich nicht mit geschachtelten ?: zu verkünsteln.
-
Power Off schrieb:
ANSI/ISO/DIN/BS C++ : alles dasselbe.
dann isses ja klasse, uns mit nem amerikanischen standard zu beeindrucken. wie heißt das auf indisch?
volkard schrieb:
also warum das void?
Weil's im Standard eingefuehrt wurde, damit niemand mehr leere Parameterlisten ohne "void" schreibt.
lies doch mal mehr über c++ und halt die klappe solang. dieses void ist so nutzlos wie deine Gegennzeichneten Tricks.
-
Lies mal im C++ Standard:
ISO 14882:2003 Chapter 8.3.5 Section 2 schrieb:
The parameter list (void) is equivalent to the empty parameter list.
Warum, meinst Du, steht das da wohl drin?
-
Es ist ja auch so, bestreitet ja niemand. Der Punkt ist: Man kann es genausogut auch nicht schreiben und das hat sich nicht nur eingebürgert sondern ist auch logischer.
MfG SideWinder
-
Power Off schrieb:
Lies mal im C++ Standard:
ISO 14882:2003 Chapter 8.3.5 Section 2 schrieb:
The parameter list (void) is equivalent to the empty parameter list.
Warum, meinst Du, steht das da wohl drin?
Damit man in vorhandenen C-Codes nicht die voids rauspopeln muss.
-
Optimizer schrieb:
Ich finde, dass man so extrem nicht sein muss. Sowas wie
bool kannSpäterVertauschtWerden = (a > b)
ist doch völlig in Ordnung. Auch ein == finde ich in Ordnung, man braucht sich natürlich nicht mit geschachtelten ?: zu verkünsteln.
denkbar ist das. aber solchen code schreibe ich nicht. kommt irgendwie nicht vor. hab ich seit jahren nicht gemacht. vielleicht kommt's in langen funktionen öfters vor.
-
Power Off schrieb:
In C++ wurde zuerst "foo()" geschrieben, heute "foo(void)". Damit ist man dem ANSI C Standard gefolgt.
quelle?
-
Walli schrieb:
Damit man in vorhandenen C-Codes nicht die voids rauspopeln muss.
Umgekehrt ist's viel schlimmer: Ein C++ Programmierer meint, C zu koennen, weil er ja C++ kann, und schreibt dann sowas wie:
int func()
Was in C etwas voellig anderes bedeutet: naemlich, alle Argumente sind erlaubt. In ANSI C laengst verboten.
-
volkard schrieb:
Power Off schrieb:
In C++ wurde zuerst "foo()" geschrieben, heute "foo(void)". Damit ist man dem ANSI C Standard gefolgt.
quelle?
Guck doch selber, hier ein paar Stichworte: AT&T 2.0 Standard, AT&T 3.0 Standard, CFront, alles prae-ANSI/ISO C++.
-
Power Off schrieb:
Guck doch selber, hier ein paar Stichworte: AT&T 2.0 Standard, AT&T 3.0 Standard, CFront, alles prae-ANSI/ISO C++.
ich suche keinen standard, sondern einen außer dir, der sagt, daß man in c++ inzwischen (void) schreibt und früher nicht.
-
Power Off schrieb:
Guck doch selber, hier ein paar Stichworte: AT&T 2.0 Standard, AT&T 3.0 Standard, CFront, alles prae-ANSI/ISO C++.
ich suche keinen standard, sondern einen außer dir, der sagt, daß man in c++ inzwischen (void) schreibt und früher nicht.
-
volkard schrieb:
Power Off schrieb:
Guck doch selber, hier ein paar Stichworte: AT&T 2.0 Standard, AT&T 3.0 Standard, CFront, alles prae-ANSI/ISO C++.
ich suche keinen standard, sondern einen außer dir, der sagt, daß man in c++ inzwischen (void) schreibt und früher nicht.
Frueher, in den alten Standards, gab's kein "void" in C++ Parameterlisten.
Seit es erlaubt ist, schreibe ich immer "void" fuer leere Parameterlisten in C++. Das sagt ganz klar: Keine Parameter. In Java darf man "void" immer noch nicht zur Deklaration leerer Parameterlisten benutzen.
Man kann sich ueber Sinn und Unsinn void "void" in leeren Parameterlisten streiten. Jedenfalls fuer C++ und C halte ich es fuer sinnvoll, da es Missverstaendnisse vermeiden kann.
-
In Java darf man "void" immer noch nicht zur Deklaration leerer Parameterlisten benutzen.
Dann wäre der Siegeszug von .NET wenigstens gewiss. Wieso soll ich etwas explizit hinschreiben wenn es implizit sowieso klar ist
MfG SideWinder
-
SideWinder schrieb:
Dann wäre der Siegeszug von .NET wenigstens gewiss. Wieso soll ich etwas explizit hinschreiben wenn es implizit sowieso klar ist
Eben weil es bei C zu Missverstaendnissen kommen kann. Ein C++ oder Java Programmierer bekommt die Aufgabe, eine C-Library zu entwickeln (z.B. fuer JNI usw.) und wundert sich ueber die Ergebnisse. Ausserdem werden in einigen Umgebungen immer noch K&R-C-Compiler verwendet.
Das Normungskommitte hat fuer 2003er ISO C++ Standard die Abkehr vom C89 Standard beschlossen, und erfordert jetzt, dass C++ Programme mindestens dem C90 Standard folgen (siehe z.B. Annex C.2).