schlechte angewohnheit?
-
Du darfst und solltest Konstanten auch Namen geben:
const int dingsbums = 13*5; int main() { ...dingsbums... }
dann erübrigt sich Deine Frage eigentlich.
Und sonst kannst Du mal nach "constant folding" per Google suchen. Der GCC behandelt sogar Funktionen wie den Sinus zur Compile-Zeit, falls möglich.
-
CStoll schrieb:
Was soll an dieser Konstruktion denn besonders verständlich sein?
Die Multiplikation.
CStoll schrieb:
Und welche Art von Optimierungen würdest du hier erwarten?
Ausrechnung zur Compilezeit.
-
Halozination schrieb:
hi, um meinen code im nachhinein besser zu verstehen schreibe ich gerne sachen wie
while(true) {if (a==13*5) { ... }}
.
wird das vom compiler optimiert oder wird das bei jeder programm ausführung aufs neue ausgerechnet?if(a==13*5)
statt
if(a==65)//13*5
ist sehr gut.
Aberwhile(true)
statt
for(;;)
ist nicht hübsch.
-
EOutOfResources schrieb:
CStoll schrieb:
Was soll an dieser Konstruktion denn besonders verständlich sein?
Die Multiplikation.
CStoll schrieb:
Und welche Art von Optimierungen würdest du hier erwarten?
Ausrechnung zur Compilezeit.
Bei so einem Gebilde hätte ich als erstes vermutet, daß er auf die sinnlose Schleifen-Konstruktion hinauswollte
Aber ich gehe mal davon aus, daß die meisten Compiler den Ausdruck 13*5 direkt berechnen und im fertigen Code mit 65 vergleichen würden.
-
ich habe dieses sinnlose while(true) eingebaut damit es einen deutlichen unterschied macht ob es jedes mal aufs neue ausgerechnet wird oder nicht :D.
bei for(;;) und while(true) hatte ich eigentl. immer vertrauen in compiler optimierung, aber ty.
-
volkard schrieb:
Aber
while(true)
statt
for(;;)
ist nicht hübsch.
Wieso?
-
for(;;) und while(true) hatte ich eigentl. immer vertrauen in compiler optimierung, aber ty.
Das hat nichts mit Performanz zu tun, for(;;) ist einfach eine Sache von schönerem Stil
.
-
EOP schrieb:
volkard schrieb:
Aber
while(true)
statt
for(;;)
ist nicht hübsch.
Wieso?
Weil der Arbeitgeber da gleich denkt "Au Weia, wieder so einer, der zu viel am Pascal-Topf genascht hat, alte C/C++-Bücher gelesen hat. Wenn der hier den lokalen Dialekt nicht spricht, wird er auch seine Algos nicht an die Sprache anpassen können oder gar kein Verständnis dafür haben, daß die gute Implemetierung auch von der Implemetierungssprache abhängt. Warum muß sowas immer mir passieren..."
while(true) oder while(1==1) sind nicht falsch, aber eben nicht hübsch.#define ever (;;)
-
Ich find while(true) schöner.. vielleicht sollten wir mal eine Umfrage im NadrW Forum starten?
-
Athar schrieb:
for(;;) und while(true) hatte ich eigentl. immer vertrauen in compiler optimierung, aber ty.
Das hat nichts mit Performanz zu tun, for(;;) ist einfach eine Sache von schönerem Stil
.
Das beantwortet meine Frage auch noch nicht.
Edit:
Deine Antwort hat sich mit meinem 2. post überschnitten.Ich hab nie Pascal benutzt (genausowenig wie Basic), daher bin ich unbelastet.
Wieso das "schönerer" Stil sein soll leuchtet mir trotzdem nicht ein.
for(;;)
erscheint mir da schon eher wie ein Missbrauch eines Sprschelements, da es erwartete Parameter nicht benutzt.
Eher ein C-typischer Hack imho.
-
cooky451 schrieb:
Ich find while(true) schöner..
Ich auch.
-
for(;;) wird "forever" gesprochen, while(true) wirkt dagegen ziemlich unbeholfen. Solange wahr noch wahr ist, mache x? Bitte nicht.
Allerdings ist das immer noch besser als while(1), was man leider auch in realen Projekten sieht.
-
Hatte auch immer
while (true)
benutzt. Es scheint aber allgemeiner Konsens zu sein,for (;;)
zu nutzen, deshalb hab ich umgestellt. Konventionen finde ich gut, da passe ich mich manchmal gerne an.
-
EOP schrieb:
Ich hab nie Pascal benutzt (genausowenig wie Basic), daher bin ich unbelastet.
Oder Du hast zu alte Bücher gelesen oder von Leuten gelernt, die vor langer Zeit stehengeblieben sind.
EOP schrieb:
Wieso das "schönerer" Stil sein soll leuchtet mir trotzdem nicht ein.
for(;;)
erscheint mir da schon eher wie ein Missbrauch eines Sprschelements, da es erwartete Parameter nicht benutzt.
Eher ein C-typischer Hack imho.for(;;) ist ein Idiom und heißt forever.
while(true) hingegen ist die mißbräuchliche Verwendung, das sieht aus wie eine kopfgesteuerte Schleigfe, ist aber in Wirklichkeit eine Endlosschleife, weil die erwartete Bedingungsprüfung mit einem festen true weggeschummelt wurde.
Tja, so könnte man es auch sehen.
Da hilft nur eine Abstimmung.
-
volkard schrieb:
Aber
while(true)
statt
for(;;)
ist nicht hübsch.
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.
-
imho:
for sollte eigentlich eine zählvsriable [(e)cx] intialisieren und dann ein loop machen
- das wäre ne "zählschleife".wohingegen while
:start
mach was
oder jmp ende
jmp start
:ende
sein würde.Mit diesem Hintergrundwissen sollte while die angemessenere Lösung sein.
und - ja, ich bin aus einem anderen Jahrhundert (-tausend). Wie wohl die Meisten hier.
LOL, worum ging's eigentlich?
-
µ 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.