globale und lokale Variablen
-
Das Default-Verhalten vom VC ist in der Tat nicht Standard-Konform, kann aber
per Kommandozeilen-Parameter konfiguriert werden.
-
Tja wer so programmieren will kann das gern tun, ich werde es auf keinen Fall machen, nicht fuer eine Zeile Code. Code von Leuten die in Schleifenkoepfen Variablen deklarieren, den ich gesehn hab, die haben auch sonst gut Scheisse gemacht und alles fuer due Unportierbarkeit und Inkompatibilitaet ihres programms getan. Ich kann so was nicht nachvollziehen.
-
PunI$0R schrieb:
Tja wer so programmieren will kann das gern tun, ich werde es auf keinen Fall machen, nicht fuer eine Zeile Code. Code von Leuten die in Schleifenkoepfen Variablen deklarieren, den ich gesehn hab, die haben auch sonst gut Scheisse gemacht und alles fuer due Unportierbarkeit und Inkompatibilitaet ihres programms getan. Ich kann so was nicht nachvollziehen.
Das eine hat mit dem anderen gar nichts zu tun.
mfg
v R
-
Wieso? Der Code wird durch solche Dinge nur unuebersichtlich. Zudem ist mir gerade eingefallen was mich noch so daran abgestossen hat. Du ueberlaesst es dem Kompiler ob die Variable nur in der For-Schleife oder auch ausserhalb gueltig ist. Das macht jeder Kompiler anders. Also ist es unschoen und inkompatibel.
-
PunI$0R schrieb:
Wieso? Der Code wird durch solche Dinge nur unuebersichtlich. Zudem ist mir gerade eingefallen was mich noch so daran abgestossen hat. Du ueberlaesst es dem Kompiler ob die Variable nur in der For-Schleife oder auch ausserhalb gueltig ist. Das macht jeder Kompiler anders. Also ist es unschoen und inkompatibel.
Das macht nicht jeder Compiler anders. Aber belassen wir es einfach dabei, dass
du es anders machst.mfg
v R
-
PunI$0R schrieb:
Wieso? Der Code wird durch solche Dinge nur unuebersichtlich. Zudem ist mir gerade eingefallen was mich noch so daran abgestossen hat. Du ueberlaesst es dem Kompiler ob die Variable nur in der For-Schleife oder auch ausserhalb gueltig ist. Das macht jeder Kompiler anders. Also ist es unschoen und inkompatibel.
dieses nicht-konforme verhalten ist im übrigen sehr leicht zu heilen:
#define for if(false);else for
der rest des (original-)codes hat ja schliesslich noch ganz andere probleme. der zugiff auf elemente ausserhalb der grenzen eines arrays ist undefiniertes verhalten.
-
BigNeal schrieb:
schliesse mich Alex an. meines wissens ist das lokale int nur in der forschleife gültig. und dort wird das globale durch das lokale "überdeckt"
ihr habt recht, schande über mich! das ist mir doch tatsächlich nicht aufgefallen.
-
PunI$0R schrieb:
Wieso? Der Code wird durch solche Dinge nur unuebersichtlich. Zudem ist mir gerade eingefallen was mich noch so daran abgestossen hat. Du ueberlaesst es dem Kompiler ob die Variable nur in der For-Schleife oder auch ausserhalb gueltig ist. Das macht jeder Kompiler anders. Also ist es unschoen und inkompatibel.
was ist übersichtlich?
for(int i = 0; i < 10; ++i) std::cout << i;
oder
{ int i; for(i=0; i < 10; ++i) std::cout << i; }
-
ich benutze schon immer lifes erste variante und kann nicht meckern. bis jetzt gab es noch keine probleme und es wird auch weiterhin keine damit geben.
PunI$0R schrieb:
Wieso? Der Code wird durch solche Dinge nur unuebersichtlich. Zudem ist mir gerade eingefallen was mich noch so daran abgestossen hat. Du ueberlaesst es dem Kompiler ob die Variable nur in der For-Schleife oder auch ausserhalb gueltig ist. Das macht jeder Kompiler anders. Also ist es unschoen und inkompatibel.
dem muss ich widersprechen. der vctoolkit2003-, gcc 3.2 (win), gcc 3.3 (linux) und bcc-compiler verhalten sich hier absolut gleich:
for (int i=0;i<10;i++) std::cout<<i; for (int i=0;i<30;i++) std::cout<<i;
das gibt bei diesen 4 compilern keine fehler!
-
Lars Hupel schrieb:
dem muss ich widersprechen. der vctoolkit2003-, gcc 3.2 (win), gcc 3.3 (linux) und bcc-compiler verhalten sich hier absolut gleich:
for (int i=0;i<10;i++) std::cout<<i; for (int i=0;i<30;i++) std::cout<<i;
das gibt bei diesen 4 compilern keine fehler!
du musst vc aber explizit sagen (/Zc:forScope), dass er das hier NICHT akzeptieren soll:
for (int i=0,s=0;i<10&&s<10;i++) s+=i; if ( i < 10 ) // ...
-
so was habe ich noch nicht probiert...