Einzelnen Beitrag anzeigen

PRehders

Registriert seit: 31. Okt 2003
Ort: Hamburg
42 Beiträge
 
#27

Re: For-Schleife von 0 bis 7 fängt bei 8 an

  Alt 15. Dez 2004, 15:28
Zitat von Neutral General:
Zitat von Hansa:
Die Zählvariable hat immer einen um 1 erhöhten Wert außerhalb der Schleife. Das ist kein Zufall.
Würde mich ja mal interessieren warum das so ist
Wenn man Optimierungen (wie die Umkehrung des Schleifendurchlaufs) mal beseite lässt, ist die Erklärung recht einfach: Da bei einer For-Schleife der untere Grenzewert ja vorab bereits höher sein kann als der obere (bei Verwendung von Variablen für diese Werte), wird eine For-Schleife immer als abweisende Schleife gebaut, also die Abbruchbedingung wird vorab geprüft.
Nach dem Schleifendurchlauf wird die Zählvariable erhöht und wieder an den Anfang (die Prüfung!) gesprungen. Daher muss die Zählvariable nach dem Ende der Schleife um eins höher sein als der Abbruchwert.

Die Optimierungen des Compilers können dies natürlich ändern, aber nur dann, wenn die Zählvariable entweder nicht oder in einer sog. inavarianten Weise benutzt werden: Wird ein Array mit konstanten oder nicht von der Zählvariablen abhängigen Werten gefüllt, kann der Compiler das Füllen auch umdrehen und ggf. nur ein Register benutzen, so dass der Wert nach dem Schleifendurchlauf überhaupt nicht mehr existiert.
Dies jedoch beruht alles auf der Forderung von Pascal, dass die Zählvariable bzw. der Inhalt nach dem Schleifendurchlauf nicht mehr definiert ist!

Viel Spaß noch

Peter
Peter Rehders
Man sollte niemanden ernst nehmen, der sich ernst nimmt.
  Mit Zitat antworten Zitat