for(;;) - Sinn?



  • for(;;)
    

    Welchen Sinn hat dieses Konstrukt?



  • Anwendungsspezifisch. Gegenfrage: Welchen Sinn machen Bratpfannen, wenn ich keine Bratpfannen benutze?



  • Endlosschleife.



  • Was passiert überhaupt?
    Intuitiv hätte ich getippt, dass der Compiler das gar nicht erst übersetzt.
    In dem mir vorliegenden Code, wo dieses Konstrukt vorkommt, scheint es für eine Schleife genutzt zu werden, die mittels break verlassen wird.
    Wo liegt der Unterschied zu

    while(1)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    ?



  • Wahrscheinlich gibt es keinen Unterschied. Aber C++ hat auch nicht den Anspruch, minimalistisch zu sein. Genau wie Kochutensilien. Braten kann man auch in Toepfen, trotzdem gibt es Bratpfannen.



  • Vielen Dank für eure schnellen Antworten!



  • Kann sein, dass dein Compiler für

    while(1)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    leicht kürzeren Code erzeugt als bei

    for(;;)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    , funktionell bedeutet es wie du schon erkannt hast, dasgleiche.



  • Wutz schrieb:

    Kann sein, dass dein Compiler für

    while(1)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    leicht kürzeren Code erzeugt als bei

    for(;;)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    , funktionell bedeutet es wie du schon erkannt hast, dasgleiche.

    Dann würde ich mir aber schleunigst einen anderen Compiler suchen.



  • Wutz schrieb:

    Kann sein, dass dein Compiler für [...] leicht kürzeren Code erzeugt

    ???

    Kann aber auch andersrum sein. Kann aber auch beides mal der gleiche Code sein. Was willst du denn damit eigentlich aussagen?



  • Wutz schrieb:

    Kann sein, dass dein Compiler für

    while(1)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    leicht kürzeren Code erzeugt als bei

    for(;;)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    , funktionell bedeutet es wie du schon erkannt hast, dasgleiche.

    Mag sein, dass das aus rein logischer Sicht kürzeren Code erzeugen würde, aber in der Praxis kennt der Compiler solche Konstrukte und optimiert sie entsprechend zu dem gleichen Code. Braucht man sich also keine Gedanken drüber zu machen.



  • cpuchtler schrieb:

    Wo liegt der Unterschied zu

    while(1)
    {
      if(bedingung)
      {
        break;
      }
    }
    

    ?

    Schon bei K&R wird

    for(;;)
    

    für die Endlosschleife empfohlen. Der Grund weshalb

    for(;;)
    

    von vielen bevorzugt wird ist, daß hierbei keinerlei Bedingung notwendig ist, und man so klar erkennt, daß es sich nicht um ein Tippfehler handelt. Das Ergebnis ist jedenfalls äquivalent und es hängt vom persönlichen Gusto ab, was man bevorzugt.


Anmelden zum Antworten