Así que siempre escuché que los campos de clase (basados en el montón) se inicializaban, pero las variables basadas en la pila no. También escuché que los miembros del registro (que también están basados en la pila) tampoco se inicializaron. El compilador advierte que las variables locales no se inicializan ([Advertencia de DCC] W1036 La variable 'x' podría no haberse inicializado), pero no advierte para miembros de registro. Entonces decidí hacer una prueba.¿Qué variables se inicializan cuando está en Delphi?
siempre consigo de enteros y falsa de Booleanos para todos los miembros de discos.
Intenté activar y desactivar varias opciones de compilación (depuración, optimizaciones, etc.), pero no hubo diferencia. Todos mis miembros de registro están siendo inicializados.
¿Qué me estoy perdiendo? Estoy en Delphi 2009 Actualización 2.
program TestInitialization;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TR = Record
Public
i1, i2, i3, i4, i5: Integer;
a: array[0..10] of Integer;
b1, b2, b3, b4, b5: Boolean;
s: String;
End;
var
r: TR;
x: Integer;
begin
try
WriteLn('Testing record. . . .');
WriteLn('i1 ',R.i1);
WriteLn('i2 ',R.i2);
WriteLn('i3 ',R.i3);
WriteLn('i4 ',R.i4);
WriteLn('i5 ',R.i5);
Writeln('S ',R.s);
Writeln('Booleans: ', R.b1, ' ', R.b2, ' ', R.b3, ' ', R.b4, ' ', R.b5);
Writeln('Array ');
for x := 0 to 10 do
Write(R.a[x], ' ');
WriteLn;
WriteLn('Done . . . .');
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
ReadLn;
end.
Salida:
Testing record. . . . i1 0 i2 0 i3 0 i4 0 i5 0 S Booleans: FALSE FALSE FALSE FALSE FALSE Array 0 0 0 0 0 0 0 0 0 0 0 Done . . . .
ver también: http://stackoverflow.com/questions/132725/are-delphi-variables-initialized-with-a-value-by-default – Ampere