J'ai donc toujours entendu dire que les champs de classe (basés sur le tas) étaient initialisés, mais pas les variables basées sur la pile. J'ai également entendu dire que les membres de l'enregistrement (également en fonction de la pile) n'étaient pas non plus initialisés. Le compilateur avertit que les variables locales ne sont pas initialisées ([Avertissement DCC] W1036 La variable 'x' n'a peut-être pas été initialisée), mais ne prévient pas les membres de l'enregistrement. J'ai donc décidé de faire un test.Quelles sont les variables initialisées en Delphi?
Je reçois toujours de Entiers et faux de booléens pour tous les éléments d'enregistrement.
J'ai essayé d'activer et de désactiver diverses options du compilateur (débogage, optimisations, etc.), mais il n'y avait aucune différence. Tous mes membres d'enregistrement sont en cours d'initialisation.
Qu'est-ce qui me manque? Je suis sur Delphi 2009 Mise à jour 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.
Sortie:
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 . . . .
voir aussi: http://stackoverflow.com/questions/132725/are-delphi-variables-initialized-with-a-value-by-default – Ampere