Uwaga na użycie polecenia Exit
w funkcjach inline! Używam tutaj Delphi XE3.Czy to błąd, który próbuje skompilować ten kod powoduje zakończenie pracy IDE lub nie działa kompilator?
Objaw
W pewnych okolicznościach, kiedy wykonywane jest połączenie do funkcji inline, który zawiera polecenie Exit
i wartość powrót funkcji inline służy bezpośrednio w WriteLn()
, kompilator zgłasza błąd wiadomość,
"dcc" exited with code 1.
lub nawet najgorsze, IDE Delphi kończy się bez potwierdzenia.
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.
Jeśli jednak wartość powrotu funkcji liniowego jest przechowywany w zmiennej, a następnie jest wykorzystywana w WriteLn()
problem nie występuje.
procedure Test;
var
b: Boolean;
begin
b := ProcessNumber(0);
writeln(b);
end;
Pytania
- Jest to błąd kompilatora?
- Jeśli to błąd, czy istnieje sposób na bezpieczne wyjście z funkcji wstawiania?
To sprawia, że zastanawiam się, czy można się spodziewać tego, aby wyjść z kontekstu dzwoniącego, czy tylko funkcję inline? – TLama
@ TLama Myślę, że pytający wie, że 'inline' nie zmienia znaczenia' exit'.To wewnętrzny AV, który zabija IDE, to jest problem. –