Давеча моё поделиЁ запустили под вайном, и оно повисло на заклиненной критической секции
Написал тест, и убедился что я таки дятел: и break, и exit наружу запускают блок finally штатно. Goto наружу невозможен, компилятор просто тебя пошлёт.
И вот я подумал: это в документации где-то прописано, или я просто слепоглухотупой?
- Код: Выделить всё
{$mode objfpc}
{$apptype console}
program finally_eh;
var i: integer;
label b;
procedure a;
begin
try
WriteLn('exit...');
Exit();
finally
WriteLn('finally');
end;
end;
begin
a;
for i:= 1 to 1 do begin
try
WriteLn('break...');
break;
finally
WriteLn('finally');
end;
end;
//allright, this one no go:
//finally.lpr(35,5) Error: Jump in or outside of an exception block
{
try
WriteLn('goto...');
goto b;
finally
WriteLn('finally');
end;
b:
}
{$ifdef windows}
WriteLn('Press Enter to close');
ReadLn;
{$endif}
end.
- Код: Выделить всё
exit...
finally
break...
finally
Press Enter to close