schlechte angewohnheit?



  • 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/p321281

    Oder 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/p321281

    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.



  • µ 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_loop

    Aber 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.


  • Mod

    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(;; ) und while(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 einem if(...)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 und for sind keine Funktionsaufrufe, daher gehört ein Leerzeichen vor die öffnende Klammer - statt dem Gefrickel

    while(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.


Anmelden zum Antworten