Vorsicht vor Exit
Befehl Verwendung in Inline-Funktionen! Ich habe Delphi XE3 hier benutzt.Ist es ein Fehler, der versucht, diesen Code zu kompilieren, führt dazu, dass die IDE beendet wird oder der Compiler nicht ausgeführt werden kann?
Symptom
Unter bestimmten Umständen, wenn ein Anruf zu einer Inline-Funktion hergestellt ist, die Exit
Befehl enthält, und den Rückgabewert der Inline-Funktion direkt in WriteLn()
verwendet wird, meldet der Compiler einen Fehler Nachricht,
oder sogar am schlimmsten, die Delphi-IDE endet ohne Bestätigung.
function ProcessNumber(const iNumber: Integer): Boolean; inline;
begin
if iNumber = 0 then begin
Result := False;
Exit;
end;
// some code here ...
Result := True;
end;
procedure Test;
begin
writeln(ProcessNumber(0));
end;
begin
Test;
ReadLn;
end.
Wenn jedoch der Rückgabewert der Inline-Funktion in einer Variable gespeichert wird, und dann wird die Variable in WriteLn()
verwendet, ist das Problem nicht auftritt.
procedure Test;
var
b: Boolean;
begin
b := ProcessNumber(0);
writeln(b);
end;
Fragen
- Ist das ein Compiler Fehler?
- Wenn dies ein Fehler ist, gibt es eine Problemumgehung zum sicheren Beenden einer Inline-Funktion?
Es frage ich mich macht, erwarten Sie diese den Anrufer Kontext zu verlassen, oder einfach nur die Inline-Funktion? – TLama
@TLama Ich glaube, der Fragesteller weiß, dass 'inline' nicht ändert, was' exit' bedeutet.Es ist das interne AV, das die IDE tötet, die das Problem ist. –