for-Schleife so sinnvoll ?
-
Warum soll dieser Code nicht gehen?
Oder hast du zufällig VC6. Ich glaube, ich habe da mal was gehört, dass er da etwas nicht nach Standard regelt.
(mein g++ packt es)://CODE int main() { for (int i=0;i<10;++i) { //Anweisungen } for(int i=0;0<5;++i) { //Anweisungen } return 0; }
Edit: 2 Sätze entfernt
Edit 2: zu spät
-
#define for if(0){}else for
und gut ist[edit]for vergessen[/edit]
-
Außerdem macht man kleine Funktionen.
-
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".