for-Schleife so sinnvoll ?



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



  • Hallo,

    peterchen schrieb:

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

    Dise Bemerkung schein ich wohl irgendwo ueberlesen zu haben?

    peterchen schrieb:

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

    Ich wuerde vorschlagen, dass wir saemtliche existierende Standards in eine Kiste
    schmeisen und verbrennen. Dann funktionieren bestimmte Codes eben nur noch
    compilerspezifisch aber: who cares?

    mfg
    v R



  • pfft



  • virtuell Realisticer schrieb:

    Ich wuerde vorschlagen, dass wir saemtliche existierende Standards in eine Kiste
    schmeisen und verbrennen. Dann funktionieren bestimmte Codes eben nur noch
    compilerspezifisch aber: who cares?

    du kannst doch nicht ernsthaft erwarten, das ein Compiler einen Standard unterstützt der nach dem Erscheinen des Compilers verabschiedet wurde!

    kauf dir visual c++.Net und dann sieht die sache schon ganz anders aus. Im übrigen kannst du von dem erwarten das er den Standard unterstützt. Ist ja auch danach erschienen.



  • Online schrieb:

    du kannst doch nicht ernsthaft erwarten, das ein Compiler einen Standard unterstützt der nach dem Erscheinen des Compilers verabschiedet wurde!

    Der Standard wurde bekanntermaßen in einem unterirdischen Bunker auf Area 51 mit höchster Geheimhaltungsstufe entwickelt, so daß Microsoft gar nichts wissen konnte. Oder auch nicht. Schalter wie /Za lassen vermuten, daß Microsoft doch mehr wusste. In Anbetracht der Tatsache, daß in Jahren davor schon irgendwelche vorläufigen Exemplare der Norm erschienen sind, und Microsoft bei den Normierungsgesprächen mit am Tisch saß, ist das allerdings keine so schockierende Nachricht.

    Ich denke, niemand macht Microsoft einen Vorwurf, die unternehmensinterne Interessenslage war damals einfach anders, dafür hat ja jeder (bzw ich) Verständnis. Allerdings muss man die Frage, ob einem die Normierung komplett egal ist, wenn man im Jahre der Veröffentlichung einen veralteten Compiler in den Markt presst, schon stellen lassen.



  • Online schrieb:

    virtuell Realisticer schrieb:

    Ich wuerde vorschlagen, dass wir saemtliche existierende Standards in eine Kiste
    schmeisen und verbrennen. Dann funktionieren bestimmte Codes eben nur noch
    compilerspezifisch aber: who cares?

    du kannst doch nicht ernsthaft erwarten, das ein Compiler einen Standard unterstützt der nach dem Erscheinen des Compilers verabschiedet wurde!
    ...

    Nein, das tue ich nicht und das habe ich auch nicht behauptet!

    mfg
    v R



  • Daniel E. schrieb:

    Ich denke, niemand macht Microsoft einen Vorwurf, die unternehmensinterne Interessenslage war damals einfach anders, dafür hat ja jeder (bzw ich) Verständnis. Allerdings muss man die Frage, ob einem die Normierung komplett egal ist, wenn man im Jahre der Veröffentlichung einen veralteten Compiler in den Markt presst, schon stellen lassen.

    das hört sich jetzt aber so an als ob die 6er Version keine Standard unterstützt.... 👎



  • Jungs was soll diese unsinnige/unseelige Diskussion. 🙄 🙄

    Die Fakten sind klar und vor allen Dingen unveränderlich so wie sie sind.

    1.) Der Standard legt fest das die Zählvariable nur in der Schleife gültig ist.

    2.) Micrsoft unterstützt dieses Verhalten per default nicht. Wenn man das so will, dann muss man nicht nur dieses sondern gleich alle "Microsoft"-Erweiterungen abschalten.

    3.) Das "gute" Teil ist wirklich schon älter als der Standard(98) selbst. Und ich persönlich glaube nicht das man viele Compiler aus dem Jahr 1998 findet die konform zu dem frisch verabschiedeten Standard waren. Ob es heute einen gibt der das wirklich zu 100% schafft, ich weiss nicht... Also bitte Ball flachhalten 😋

    Ich selbst habe wesentlich häufiger Probleme mit den unzureichenden Fähigkeiten im Bereich der Template-Programmierung. 😮 Für zu Hause reichts, und bei der Arbeit ist VC7.1 doch schon um einiges besser. (100% ?!?)

    mfg JJ



  • Der C++ Standard wurde also so ratz fatz ganz schnell innerhalb ein paar Monate entwickelt? Cool...

    Ich dachte immer, dass sich das Jahrelang hingezogen hat. So dass der Standard schon nahezu fertig war als der VC++6 releast wurde.

    Und natürlich ist alles beim VC++7.0 besser, nicht wahr?
    Vorallem die partielle Templatespezialisierung funktioniert ja wieder mal perfekt.

    Natürlich ist VC++ alt - aber kann man das als Entschuldigung nehmen?
    Schließlich mangelt es ihm ja nicht nur an den modernsten Sachen, sondern so simple Sachen wie new wirft kein bad_alloc - die Dinkumware STL ist extrem mies, da es die selbe Lib ist, die der VC++5 auch hatte.

    Der for Scope ist doch das wenigste - schaut euch mal Humes Port von Loki auf den VC++6 an - da wird euch sicher klar, dass der VC++6 eben ein schlechter Compiler ist.

    Und wenn ihr euch Roni Sharonis Port von Loki auf den VC++7 anseht, werdet ihr feststellen, dass der auch nicht so super ist.

    Aber klar. den VC++7 ignorieren wir - wir sagen lieber dass der VC++7.1 der gute Compiler ist - das stimmt natürlich, aber wir wollen doch anmerken, dass MS auch im Jahre 2002 einen Schrott Compiler auf den Markt geworfen hat.

    Der VC++7.1 war dagegen endlich(!) mal ein guter Schritt.



  • Ich verstehe den Sinn der Diskussion nicht, ist doch jedem seine eigene Entscheidung
    wie standardkonform er seinen Compiler macht und vor allem ist niemand gezwungen ihn
    zu verwenden, wenn er denn so mies ist.


Anmelden zum Antworten