for-Schleife so sinnvoll ?



  • Mis2com schrieb:

    Visual C++ 6.0 hält sich hier aber mal wieder nicht an den Standard...

    Quietsch bum paaaaaaf.... *totalcrash*

    Du hast mal wieder Keine Ahnung von dem was Du Laberst.

    http://boost.sourceforge.net/regression-logs/

    VC++6.0 unterstützen nur den C89 Standard und die .NET Reihe erst den C99 Standard und da ist das erst gültig mit dem Doppelfor mit i.



  • Visual C++ 6.0 hält sich hier aber mal wieder nicht an den Standard

    Das ist nicht ganz richting. Im ANSI compatibility mode (/Za) läßt sich obiger Code sehr wohl übersetzen.

    Das war m.E. die richtige Entscheidung, da bei "altem" C++ (vor dem ANSI-Standard) der Scope der Laufvariable eben außerhalb der Schleife lag. Und es läßt sich (zugegebenermaßen mieser) Code konstruieren, der bei dieser Änderung nicht mehr funktioniert, ohne daß der Compiler eine echte Chance hätte, das zu melden.

    [edit]ok, nitr vor-Standard, sondern alt-standard-code 🤡 [/edit]



  • #define for if(0){}else for

    😮



  • nix da schrieb:

    VC++6.0 unterstützen nur den C89 Standard und die .NET Reihe erst den C99 Standard und da ist das erst gültig mit dem Doppelfor mit i.

    Bist du dir bewusst, dass wir im C++ Forum sind?
    Bist du dir bewusst, dass "for(int i; i<10; ++i)" kein legales C89 ist?



  • wieso nicht einfach:

    int i=0
    for(i=0; i<10; ++i)
    {

    }

    for(i=0; i<5; ++i)
    {

    }



  • nix da:
    Langsam wird es lächerlich.

    khg:
    Nagut, das wäre natürlich auch eine Möglichkeit.

    MfG Eisflame 🙂



  • @Mis2com: ich find es ja lächerlich, jedesmal vor dem heiligen Standard einen Kniefall zu machen, und alle scheinbar abtrünnigen zu prügeln - aber das scheint heir ja so üblic hzu sein....



  • peterchen schrieb:

    @Mis2com: ich find es ja lächerlich, jedesmal vor dem heiligen Standard einen Kniefall zu machen, und alle scheinbar abtrünnigen zu prügeln - aber das scheint heir ja so üblic hzu sein....

    Stimmt - da ist ein Kniefall vor dem heiligen Microsoft natürlich besser.

    Hast du den Thread gelesen??



  • Ja, ich habe in der Tat MSVC 6.0, aber mit welcher Begründung sollte denn der Compiler in diesem Fall vom Standard abweichen ? Das ist doch sinnlos...



  • khg schrieb:

    wieso nicht einfach:

    int i=0
    for(i=0; i<10; ++i)
    {

    }

    for(i=0; i<5; ++i)
    {

    }

    siehe meinen Code, drittes Beispiel: ist mir zu global.



  • ethereal schrieb:

    Ja, ich habe in der Tat MSVC 6.0, aber mit welcher Begründung sollte denn der Compiler in diesem Fall vom Standard abweichen ? Das ist doch sinnlos...

    klar, vorallem dann sinnlos, wenn es compilerfehler beim portieren gibt.

    Sowas nervt. Das hat doch nix mit 'Standard huldigen' zu tun - der Code ist einfach dann MS spezifisch und kompiliert nur dort bzw. legaler Code wird nicht angenommen.

    Aber klar - der Standard liegt falsch und MS ist das einzig ware.



  • Wenn der VC 6.0 dafür eine Option besitzt, dann ist doch alles in Ordnung 😕

    Ansonsten benutzt man den Hack von Shade damit gehts ja auch 🙂



  • @Shade:
    Wieso so kompliziert?
    Wieso nicht einfach:

    #define for if(true) for
    


  • @SirLant:
    Nö, hat er nicht.

    dEUs schrieb:

    Wieso so kompliziert?
    Wieso nicht einfach:

    #define for if(true) for
    

    einziges Problem:

    if(foo)
      for(...) bla();
    else
      foobar();
    

    und schon ist das ergebnis n bisschen komisch.



  • Shade Of Mine schrieb:

    @SirLant:
    Nö, hat er nicht.

    peterchen schrieb:

    Visual C++ 6.0 hält sich hier aber mal wieder nicht an den Standard

    Das ist nicht ganz richting. Im ANSI compatibility mode (/Za) läßt sich obiger Code sehr wohl übersetzen.

    Ich hab kein VC 6.0 mehr, aber ich denke mal, dass Peterchen sich das nicht eben aus den Fingern gesaugt hat.



  • SirLant schrieb:

    Ich hab kein VC 6.0 mehr, aber ich denke mal, dass Peterchen sich das nicht eben aus den Fingern gesaugt hat.

    Mein VC++7 kann den forscope auch richtig setzen - allerdings glaube ich, dass es diese option beim vc++6 noch nicht gibt.

    der ansi kompatible modus zerstört übrigens viele system header dateien - man kann ihn also nur theoretisch setzen, praktisch gesehen aber nicht.



  • @etheral:

    int i = 17;
    if (foo)
    {
      for(int i = 0; i<10; ++i)
      { 
         if (bar(i) > 42) break;
      } 
      int y = bar(i); // hier passiert was
    }
    

    Der Code verhält sich unterschiedlich, je nach scope der Schleifenlaufvariable. Wie gesagt, mistiger Code, aber bei mehr Komplexität hab' ich schon schlimmeres gesehen.
    Das Problem ist hier, daß alter Code plötzlich nicht mehr funktioniert, ohne daß ein Compile-Fehler auftritt. Und wer auf Ansi-Kompatibilität wert legt, compiliert halt mit Option /Za, dann geht es.
    (und ja, die Option ist in VC6 drin: Click. Und weil das mit Standard-headern nicht funktioniert, gibt es ab VC7 die separate option /Zc:forScope)

    Hast du den Thread gelesen??

    Nö, ich google regelmäßig nach "+Visual +Standard", und trolle mal so vorbei... 🙄

    Stimmt - da ist ein Kniefall vor dem heiligen Microsoft natürlich besser.

    Schade daß es für Dich nur schwarz und weiß gibt. Es geht eben nicht um "Standard vs. Microsoft".



  • peterchen schrieb:

    Stimmt - da ist ein Kniefall vor dem heiligen Microsoft natürlich besser.

    Schade daß es für Dich nur schwarz und weiß gibt. Es geht eben nicht um "Standard vs. Microsoft".

    Mal ernsthaft: warum darf Mis2Com denn dann nicht sagen dass der VC++ sich nicht an den Standard hält? Schließlich ist es Tatsache dass der VC++6 einfach zu alt ist und er hinten und vorne Fehler hat.

    /Za ist eine sinnlose Option - da man sie nicht verwenden kann
    /Zc:forScope ist das einzig vernünftige, und das hat der VC++6 nicht



  • Shade Of Mine schrieb:

    Mal ernsthaft: warum darf Mis2Com denn dann nicht sagen dass der VC++ sich nicht an den Standard hält? Schließlich ist es Tatsache dass der VC++6 einfach zu alt ist und er hinten und vorne Fehler hat.

    wie kann sich ein Programm an einen Standard halten wenn das Programm älter ist als der Standard???



  • Wenn's ihm so am Herzen liegt, kann er es gerne sagen. 🙄

    ernsthaft: Weil ich seine Bemerkung "Visual C++ 6 hält sich mal wieder nicht an den Standard" für pauschal, irreführend und zumindest unvollständig halte.

    Sicher ist /Za kein Allheilmittel, sicher ist VC6 nicht der modernste Compiler der Welt (und ich hab mir oft genug einen besseren gewünscht...) Aber die Ursache als Schlampigkeit oder Marotte von Microsoft hinzustellen, find ich kindisch.


Anmelden zum Antworten