Schleifenvariable bei for
-
Hallo,
ich habe da mal eine Frage. Jürgen Wolf schreibt in seinem Buch C++ von A bis Z beim Thema for-Schleifen, dass man die Schleifenvariable auch lokal im for-Teil deklarieren kann.
Im Buch benutzt er dann mal lokal deklarierte for-Schleifen und mal welche, die schon vorher deklariert wurden. Später im Buch schreibt er dann, dass man die Schleifenvariable nach neuem C++ Standard vor der for-Schleife deklarieren muss.Was ist denn nun richtig? Darf man die Schleifenvariable gar nicht innerhalb von for deklarieren? Oder nur, um z.B. die einzelnen Elemente eines Arrays auszugeben?
Mit ratlosen Grüßen
DerRatlose
-
DerRatlose schrieb:
Darf man die Schleifenvariable gar nicht innerhalb von for deklarieren?
Klar darfst du!
DerRatlose schrieb:
Oder nur, um z.B. die einzelnen Elemente eines Arrays auszugeben?
Zu welchem Zweck du sie deklarierst, ist dem Compiler egal. Die in der for-Schleife deklarierte(n) Variable(n) sind aber nur in dem Block der for-Schleife sichtbar.
-
DerRatlose schrieb:
Später im Buch schreibt er dann, dass man die Schleifenvariable nach neuem C++ Standard vor der for-Schleife deklarieren muss.
Das sollte Blödsinn sein. Sag mal die Seite und Zeile.
-
Seite 832
8.3.4 Schleifenvariable von forIst nur ein kurzer Absatz.
-
for(int i = 0; i < 10; i++) { // ... } i = 42; // hier kommt nach dem Standard ein FehlerDie Variable ist nur innerhalb der geschweiften Klammern gültig. Das will er dir sagen. Willst du die Schleifenvariable nach der Schleife weiter benutzen musst du sie außerhalb deklarieren.
-
DerRatlose schrieb:
...C++ von A bis Z...
... gilt auch nicht gerade als der Höhepunkt der Schöpferischen Leistung

cu André
-
Bei Visual Studio war das eine Weile so, das Variablen weiterhin gültig waren. Dies ruinierte so ziemlich die Portierbarkeit, wobei man das aber, glaube ich, auch deaktivieren konnte.
-
Fellhuhn schrieb:
Bei Visual Studio war das eine Weile so, das Variablen weiterhin gültig waren. Dies ruinierte so ziemlich die Portierbarkeit, wobei man das aber, glaube ich, auch deaktivieren konnte.
Unter VC6 kenne ich das Verhalten, einen Schalter dafür aber nicht. Führte dazu, das ich im VC6 for-Schleifen mittels einer weiteren Klammerung in ein separates Scope gesetzt habe...
cu André
-
Gut, dann wäre das geklärt. Vielen Dank.
@asc: Bis jetzt hatte ich mit dem Buch noch keine all zu großen Probleme. Auch wenn ich in einem Quelltext schon einen Fehler entdeckt habe. Welches Buch würdest du denn empfehlen?
MfG
DerRatloseEDIT: OK, jetzt hätte ich es glaube ich auch so verstanden. Habe mir den Quelltext gerade noch mal angesehen, der als Beispiel dabei stand. Da habe ich mich verlesen und nicht gesehen, dass die Variable nach verlassen der for-Schleife weiterhin genutzt wurde.
Aber trotzdem vielen Dank.
-
Fellhuhn schrieb:
Bei Visual Studio war das eine Weile so, das Variablen weiterhin gültig waren. Dies ruinierte so ziemlich die Portierbarkeit, wobei man das aber, glaube ich, auch deaktivieren konnte.
Umgekehrt:
Man kann bei neueren Studios das Verhalten mittels Switch wieder anknippsen, damit alter, Non-Standard Code weiterhin kompilierbar bleibt.
-
DerRatlose schrieb:
@asc: Bis jetzt hatte ich mit dem Buch noch keine all zu großen Probleme. Auch wenn ich in einem Quelltext schon einen Fehler entdeckt habe. Welches Buch würdest du denn empfehlen?
Die typischen Empfehlungen sind der C++ Primer und Thinking in C++ (letzteres gibt es kostenlos als Zweiteiler im Internet).
-
Gibt es denn wirkliche Nachteile in C++ von A bis Z? Dann könnte ich die beim Lesen beachten.
MfG
DerRatlose
-
DerRatlose schrieb:
Gibt es denn wirkliche Nachteile in C++ von A bis Z? Dann könnte ich die beim Lesen beachten.
Ich kenne nur Kommentare zu dem Buch, habe selbst aber das Buch nicht gelesen. Es soll weder eine sinnvolle Reihenfolge einhalten, und unnötig auf C eingehen. Zudem deutet die genannte Empfehlung auch nicht unbedingt auf die Qualität.
Grundsätzlich grobe Indizen für ein schlechtes C++ Buch:
a) Verwendung von char[]/char* vor std::string
b) Exzessive Verwendung von Arrays statt gleich auf die C++ Container hinzuweisen
=> Um hier gleich Einwürfe vorzubeugen: Es geht nicht darum die ganzen Algorithmen etc. gleich zu zeigen, sondern um die Grundfunktionen des std::vector oder alternativ std::tr1::array.
c) Intensive Verwendung von Zeigerarithmetik bereits am Anfang des Buches
d) Verwendung von C-Bibliotheken zu denen es C++ Alternativen gibtEs gibt noch mehr Punkte aber sollte einer der Punkte zutreffen sollte man zumindestens etwas vorsichtig werden...
-
Da kann ich dir größtenteils zustimmen. Einem totalem Neuling würde ich es gar nicht erst in die Hand geben.
Aber sonst geht es eigentlich. Und von der Übersicht her kann man es als Nachschlagewerk verwenden.Aber Danke für deine Tipps, werde sie beim lesen beachten.
