Hallo zusammen,
ich verwende folgendes Konstrukt:
Delphi-Quellcode:
function irgendwas:boolean;
begin
result:=false; // diese Zeile wird wegoptimiert
MyObject:=TMyObject.Create;
try
MachwasMit(MyObject);
result:=true;
finally
MyObject.Free;
end;
end;
Result soll erstmal false sein, und nur wenn in MachwasMit(MyObject) keine
Exception aufgetreten ist, auf true gesetzt werden.
Das
result:=false
wird aber wegoptimiert und ich bekomme für diese Zeile die Compilerwarnung
H2007 Auf <Name der Function> zugewiesener Wert wird niemals benutzt.
Bei einer
Exception wäre also result undefiniert.
Wenn ich aber eine Hilfsvariable einführe, compiliert es so, wie ich mir das vorstelle, und ich bekomme auch keine Compilerwarnung.
Delphi-Quellcode:
function irgendwas:boolean;
var ok:boolean;
begin
ok:=false;
MyObject:=TMyObject.Create;
try
MachwasMit(MyObject);
ok:=true;
finally
result:=ok;
MyObject.Free;
end;
end;
Wenn ich hier das ok:=false weglasse, bekomme ich sogar richtigerweise die Compilerwarnung
Variable OK ist möglicherweise nicht initialisiert worden.
Wieso erkennt der Compiler bei der Verwendung der Hilfsvariablen, dass diese im try - finally - Block möglicherweise nicht initialisiert wird, bei Verwendung von result jedoch nicht?
D2007