Betrachten Sie in Delphi
%Vor% Man könnte denken, dass i = N
nach der for
-Schleife ist, aber garantiert der Delphi-Compiler das? Kann man annehmen, dass die Schleifenvariable innerhalb einer Schleife nach einer Delphi if
Schleife gleich ihrem letzten Wert ist?
Aktualisieren
Nach ein paar einfachen Schleifen vermute ich, dass i
tatsächlich gleich eins plus dem letzten Wert von i
innerhalb der Schleife nach der Schleife ist ... Aber können Sie sich darauf verlassen das?
Nein, Delphi garantiert keinen Wert. Außerhalb der Schleife ist die Variable undefiniert - und IIRC der Language Guide dies ausdrücklich behaupten - das bedeutet, dass neuere Compiler-Implementierungen frei sind, um den Wert der Variablen außerhalb der Schleife aufgrund der tatsächlichen Implementierung zu ändern.
Ich würde vorschlagen, dass die Verwendung einer Schleife while
ist klarer, wenn Sie den Schleifenindex nach der Schleife verwenden müssen:
Nachdem diese Schleife beendet ist, wissen Sie , dass i
N + 1
ist (oder größer, wenn N
kleiner als Null sein könnte).
Es ist sogar dokumentiert , dass die Loop-Variable von Eine for
-Schleife ist außerhalb der Schleife nicht definiert.
In der Praxis: Was Sie von der Variablen erhalten, hängt von den Einstellungen des Compilers und der Komplexität des Codes ab. Ich habe gesehen, dass Änderungen im Code den Compiler in einen anderen Optimierungspfad schieben und somit den Wert dieser undefinierten Variablen verändern.
- Jeroen
Wie viele Leute sagten, soll die I-Variable nach der Schleife undefiniert sein. In der realen Welt wird es auf den letzten Wert definiert, den es hatte, bevor Sie "brechen", oder auf N + 1, wenn die Schleife von einem Lauf zum anderen läuft. Auf dieses Verhalten kann man sich jedoch nicht verlassen, da es eindeutig spezifiziert ist, dass es nicht funktionieren soll.
Manchmal wird I auch nicht zugewiesen. Ich habe dieses Verhalten hauptsächlich bei aktivierter Optimierung festgestellt.
Für Code wie diesen
%Vor%Also ... Wenn Sie den Wert von I nach der Schleife wissen wollen, ist es besser, ihn einer anderen Variablen zuzuordnen, bevor Sie die Schleife verlassen.
VERWENDEN Sie NIEMALS den Wert der for-Variablen nach der Schleife.
Überprüfen Sie Ihre Compiler-Ausgabe. Der Delphi-Compiler warnt Sie davor. Vertraue deinem Compiler.