W1035 Rückgabewert der Funktion '%s' könnte undefiniert sein (Delphi)
Nach oben zu Fehler- und Warnungsmeldungen (Delphi)
Bezeichner
Der Bezeichner für die Direktive $WARN: IMPLICIT_IMPORT
Beschreibung
Diese Warnung wird angezeigt, wenn dem Rückgabewert einer Funktion nicht in jedem Codepfad ein Wert zugewiesen wurde.
Das heißt, die Funktion könnte auch ausgeführt werden, ohne dass sie dem Rückgabewert jemals einen Wert zuweist.
program Produce;
(*$WARNINGS ON*)
var
B: Boolean;
C: (Red,Green,Blue);
function Simple: Integer;
begin
end; (*<-- Warning here*)
function IfStatement: Integer;
begin
if B then
Result := 42;
end; (*<-- Warning here*)
function CaseStatement: Integer;
begin
case C of
Red..Blue: Result := 42;
end;
end; (*<-- Warning here*)
function TryStatement: Integer;
begin
try
Result := 42;
except
Writeln('Should not get here!');
end;
end; (*<-- Warning here*)
begin
B := False;
end.
Das Problem bei den Prozeduren „IfStatement“ und „CaseStatement“ besteht darin, dass der Rückgabewert („Result“) nicht in jedem Quelltextpfad zugewiesen wird. Der Compiler geht davon aus, dass in „TryStatement“ eine Exception vor der Zuweisung von „Result“ auftreten könnte.
program Solve;
(*$WARNINGS ON*)
var
B: Boolean;
C: (Red,Green,Blue);
function Simple: Integer;
begin
Result := 42;
end;
function IfStatement: Integer;
begin
if B then
Result := 42
else
Result := 0;
end;
function CaseStatement: Integer;
begin
case C of
Red..Blue: Result := 42;
else Result := 0;
end;
end;
function TryStatement: Integer;
begin
Result := 0;
try
Result := 42;
except
Writeln('Should not get here!');
end;
end;
begin
B := False;
end.
Die Lösung besteht darin, sicherzustellen, dass der Rückgabewert in jedem möglichen Quelltextpfad zugewiesen wird.
Achtung: Verwenden Sie die Direktive noreturn, um die W1035-Warnungen zu beseitigen, wenn Exceptions ausgelöst werden.