schlechte angewohnheit?
-
µ schrieb:
Deine Ansichten werden immer dogmatischer.
Du hängst Dich an Details auf die keiner kritischen Prüfung standhalten könnten.
Du wirst alt.
Schade um einen klugen Kopf von früher.In Sachen for(;;) war ich schon immer dumm, scheint mir.
http://www.c-plusplus.net/forum/p321281
-
volkard schrieb:
µ schrieb:
Deine Ansichten werden immer dogmatischer.
Du hängst Dich an Details auf die keiner kritischen Prüfung standhalten könnten.
Du wirst alt.
Schade um einen klugen Kopf von früher.In Sachen for(;;) war ich schon immer dumm, scheint mir.
http://www.c-plusplus.net/forum/p321281Oder schon immer dogmatisch.
Wobei auch der link deinen Standpunkt nicht überzeugender macht.
Hat eher was von "Ich hab beschlossen, daß es so ist!".Sorry. Ich schätze dich, aber das ist Quatsch.
-
Es gibt auch Konventionen die besagen, dass Bezeichner von Konstanten ausschliesslich aus Grossbuchstaben bestehen. Folgst du denen?
-
volkard schrieb:
µ schrieb:
Deine Ansichten werden immer dogmatischer.
Du hängst Dich an Details auf die keiner kritischen Prüfung standhalten könnten.
Du wirst alt.
Schade um einen klugen Kopf von früher.In Sachen for(;;) war ich schon immer dumm, scheint mir.
http://www.c-plusplus.net/forum/p321281Es wäre einfach angebrachter, wenn du syntaktische Details nicht zum Idiom erheben würdest. Idiome sind mehr als das, aber z.B. weniger als Entwurfsmuster.
-
µ schrieb:
Es wäre einfach angebrachter, wenn du syntaktische Details nicht zum Idiom erheben würdest. Idiome sind mehr als das, aber z.B. weniger als Entwurfsmuster.
Idiome gibt es mehr als auf der C++-Idioms-Seite aufgelistet sind.
http://en.wikipedia.org/wiki/Programming_idiom#Infinite_loopAber ich hänge nicht an dem Wort, sondern an der Aussage. Nimm statt Idiom meinetwegen Sinneinheit, Begriff, Cluster oder ein einigermaßen passendes Wort aus der kognitiven Psychologie.
-
EOP schrieb:
imho:
for sollte eigentlich eine zählvsriable [(e)cx] intialisieren und dann ein loop machen
- das wäre ne "zählschleife".Aber hier irrst du: for ist in C++ keine Zählschleife wie in Ponyhofsprachen wie Pascal und Basic, sondern ein sehr mächtiges Kontrollflusssteuerungselement, welches unter anderem auch als Zählschleife gebraucht werden kann. Zeige, dass du dies verstehst, indem du for (;;) benutzt.
-
würdet ihr sagen das:
for (int i = 0; i<12345; i++) {..} for (int i = 10; i<54321; i++) {..}
ist schlechter als:
int i; for (i = 0; i<12345; i++) {..} for (i = 10; i<54321; i++) {..}
weil i 2 mal in der for "funktion" (hat ja nicht ganz die schreibweise einer funktion) als lokale variable erstellt wird? oder spielt es keine rolle?
-
Was soll das dämliche Geschwätz?
Nehmt die Hinweise und Tips der erfahreneren Programmierer doch einfach an oder lasst es bleiben.Intuitiv hätte ich selber wohl auch "while(true)" benutzt (wobei bei mir noch nie ein Fall aufgetreten ist, wo ich es tatsächlich verwendet habe), aber ich nehm den Hinweis auf das ideom gern zur Kenntniss.
Mir ist nicht klar was es zu nörgeln gibt wenn andere ihr Wissen teilen.
P.S.: @Halozination
Ich würde die Variante mit lokaler Definition bevorzugen.
-
Wenn schon dann so
#include<iostream> int main() { for(;;) { std::cout << "vermeide schlechte Angewohnheiten. " << std::endl; std::cout << "NoBody is perfekt " << std::endl; std::cout << "denglish" << std::endl; if( 1 ) std::cout << "c++ the best once language" << std::endl; goto end; } end: std::cout << "der Letzte macht das Licht aus" << std::endl; }
oder doch nicht
-
Wo sind die lausigen Codetags?
-
f.-th. schrieb:
Wo sind die lausigen Codetags?
Ich war mal so frei, sie zu ergänzen
@Topic: Ich finde, über den Unterschied zwischen
for(;; )
undwhile(true)
zu diskutieren ist eher eine Frage des persönlichen Stils als des praktischen Nutzens. Im Endeffekt wird bei beiden das selbe Ergebnis herauskommen - eine Endlosschleife.
Im praktischen Einsatz sind mir echte Endlosschleifen eher selten untergekommen - idR hat man eine scheinbare Endlosschleife, deren Abbruchbedingung irgendwo innen drin hinter einemif(...)break;
versteckt ist. Aber wer hat, kann ja gerne mal ein praktisch relevantes Beispiel für eine (bewußt erzeugte) Endlosschleife vorführen.
-
Auf einem Windows-Pc sind Endlosschleifen eher weniger, vermute ich.
Aber auf Mikrokontrollern, die am Limit mit zeitkritschen Aufgaben betraut laufen, könnte ich mir so etwas vorstellen. Zur Not gibt es da ja Hardwareinterrupts.
MfG f.-th.
-
Übrigens,
while
undfor
sind keine Funktionsaufrufe, daher gehört ein Leerzeichen vor die öffnende Klammer - statt dem Gefrickelwhile(true) for(;;)
verwende das hier:
while (true) for (;;)
-
abc wahrscheinlich hast du
if ( )
vergessen
-
nochmal zum eigentl. topic:
if(i+1>5){}
ist sowas schlecht? Oder gehört das auch zur verwaltung von konstanten ausdrücken und das programm kann am ende nur
if(i>4){}
sehen?
und nochmal meine letzte frage nach oben pushen:
Halozination schrieb:
würdet ihr sagen das:
for (int i = 0; i<12345; i++) {..} for (int i = 10; i<54321; i++) {..}
ist schlechter als:
int i; for (i = 0; i<12345; i++) {..} for (i = 10; i<54321; i++) {..}
beim 1. wird i doch einmal mehr allokiert als im 2., sowas kann in bestimmten situationen schon einiges an performance kosten oder? Da würde ich z.b. auf den vorteil ein locales i zu haben verzichten.
-
Nimm statt i++ auch lieber ++i, da dadurch eine sinnlose Kopie vermieden wird.
Du kannst ja mal den Unterschied zwischen post- und preincrement googlen.
-
bessereswissen schrieb:
Nimm statt i++ auch lieber ++i, da dadurch eine sinnlose Kopie vermieden wird.
falsch
-
bessereswissen schrieb:
Nimm statt i++ auch lieber ++i, da dadurch eine sinnlose Kopie vermieden wird.
richtig
-
falsch schrieb:
bessereswissen schrieb:
Nimm statt i++ auch lieber ++i, da dadurch eine sinnlose Kopie vermieden wird.
falsch
Bei einem int als Zähler gibt's natürlich keine unnötige Kopie, bei Iteratoren kann es anders aussehen.
-
Halozination schrieb:
würdet ihr sagen das:
for (int i = 0; i<12345; i++) {..} for (int i = 10; i<54321; i++) {..}
ist schlechter als:
int i; for (i = 0; i<12345; i++) {..} for (i = 10; i<54321; i++) {..}
beim 1. wird i doch einmal mehr allokiert als im 2., sowas kann in bestimmten situationen schon einiges an performance kosten oder? Da würde ich z.b. auf den vorteil ein locales i zu haben verzichten.
Nein.
Lokales i kostet eigentlich nichts. Der COmpiler muß nur zählen, wieviel Speicher die Funktion maximal braucht und kann den ganzen Speicher auf einmal anlegen. Und er kann frei wiederverwenden. Deswegen gibt es ja die Regel, daß lokale Variablen nach Definition ohne Initialisieren keinen bestimmten Wert haben. Damit der Compiler eine ganz lokale Variable auch mal herausziehen darf, ganz wie es ihm beliebt. Und so ein i wird auch gerne gleich zum Register.
Aber andersrum kann er es nicht ganz wie es ihm beliebt, das äußere i wieder lokal zu machen, um das zu schaffen, muß er schon eine ganze Menge mehr analysieren (er schafft es aber inzwischen).
Du tust also sowohl dem Programmierer einen Gefallen, der damit Fehlerchen vermeidet, als auch dem automatischen Optimierer, der besser auswählen kann.
Da ist also kein Zielkonflikt.
Es ist keine schlechte Faustregel, Variablen immer so lokal wie möglich zu machen.Bei größeren Objekten auch hieran denken: http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Declare#Answ