Hola César.
Esto se debe a la manera en que el compilador genera el código máquina. A fin de optimizar éste, si la variable contador no es referida dentro del For, su existencia es obviada y el código máquina solamente cumple el requisito de repetir el ciclo tantas veces como la cabecera del for lo indica.
Código Delphi
[-]procedure TForm1.Button1Click(Sender: TObject);
Var
I :Integer;
begin
For I := 1 To 12 Do
Caption := Caption + 'x';
end;
En cambio, si la variable contador es referida dentro del ciclo, ésta contendrá el valor que se espera.
Código Delphi
[-]procedure TForm1.Button2Click(Sender: TObject);
Var
I :Integer;
begin
For I := 1 To 12 Do
Caption := Caption + IntToStr (I);
end;
Puedes comprobar lo que hay detrás de segmentos de código como los anteriores, ejecutando paso a paso y mirando la ventana CPU del depurador. Notarás que para el primero usa una instrucción
DEC mientras que para el segundo emplea una instrucción
INC.
Como dato adicional, algo de la ayuda de Delphi que lleva cierta relación con el tema:
Cita:
Empezado por apartado "For statements"
After the for statement terminates (provided this was not forced by a break or an exit procedure), the value of counter is undefined.
|
Saludos y que haya concluido aquella restricción de teclados.
Al González.