Sagt mal, der Compiler wird ja wohl nicht so dämlich sein, und den Variableninhalt überschreiben, bevor auf ihn zugegriffen wird.
Delphi-Quellcode:
For i:=1 to 10 do SomethingWith(i);
//
// Einige Zeit später
//
Writeln(i);
Muss immer funktionieren. Es ist eben nur so, das entweder die 0 oder 11 drin steht (denke ich). Deshalb 'unbestimmt'.
Der Compiler ist nicht dämlich, weil er nichts verändert, sondern erst das Programm (Compilat), wenn es läuft.
Wie Bummi es schon erwähnt: Der Wert um eins höher. Wird also nach der letzten Schleife noch einmal um 1 erhöht, um dann festzustellen, daß die (For-)Schleifenbedingung nicht mehr erfüllt ist -> Schleifenabbruch.
Der - in dieser Hinsicht intelligente - Compiler gibt zudem einen Warnhinweis aus: "For-Schleifenvariable kann nach Durchlauf undefiniert sein".