Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

try   Найти похожие ветки 

 
Empleado ©   (2004-05-18 17:23) [0]

Всем привет!

Кто-нибудь объясните мне разницу в результате выполнения данных двух процедур. А именно, почему так происходит?

Вариант 1) С использованием raise
Вариант 2) С использованием div 0


procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    //i := 1 div i
    raise Exception.Create("My exception")
 except
    showmessage("in block TRY..EXCEPT")
 end;
 showmessage("Showmessage - after TRY..EXCEPT")
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    //i := 1 div i
    raise Exception.Create("My exception")
 finally
    showmessage("in block TRY..FINALLY")
 end;
 showmessage("Showmessage - after TRY..FINALLY")
end;


Gracias


 
Digitman ©   (2004-05-18 17:31) [1]


> почему так происходит?


а что. собссно, происходит-то ? ... что-то жуткое ?


 
Palladin ©   (2004-05-18 17:32) [2]

ну и типа справка по finally и except тебе ни о чем не сказала?


 
zhe   (2004-05-18 17:32) [3]

ни в одном из случаев последний showmessage не должен появляться, чё ту не понятно.

зы: сделайте что-то с вашым тупорылым серваком! ERROR 500!


 
zhe   (2004-05-18 17:36) [4]

то, что после finally выполнится полюбому, а то что после except, только тогда, когда после верхнего try скурвится какой-нибудь ексепшын. вот и вся ...


 
begin...end ©   (2004-05-18 17:43) [5]

Последний ShowMessage выполнится в любом из этих двух случаев, поскольку он вообще расположен за пределами блоков try...except...end и try...finally...end.


 
zhe   (2004-05-18 17:52) [6]

не гони, во втором он хрен выполнится, только в первом случае, я хреново посмортел. потому, как во втором ексэпшын сразу выбивает процедуру(функцию) на фик


 
Empleado ©   (2004-05-18 18:13) [7]

>Palladin ©   (18.05.04 17:32) [2]
Сказала, сказала... Уже битых полчаса всматриваюсь в хелп, как идиот, чес.слово; и ни фига!
Собственно вопрос от загнанности и настрадалости.
Ты даже не представляешь, сколько раз я читал эту фразу (finally): If an exception is raised during execution of statementList1, control is transferred to statementList2; once statementList2 finishes executing, the exception is re-raised...

Теперь предлагаю такой вариант:


procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    i := 1 div i
    //raise Exception.Create("My exception")
 except
    showmessage("in block TRY..EXCEPT")
 end;
 showmessage("Showmessage - after TRY..EXCEPT");
 showmessage("i = " + inttostr(i))
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    i := 1 div i
    //raise Exception.Create("My exception")
 finally
    showmessage("in block TRY..FINALLY")
 end;
 showmessage("Showmessage - after TRY..FINALLY");
 showmessage("i = " + inttostr(i))
end;


Вроде все встало на свои места.
Это оптимизатор компилятора заклинил переменную i ? Т.е. он не хотел ни в какую делать ексепшин, если i не использовалась?

Gracias


 
begin...end ©   (2004-05-18 19:06) [8]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
11-1073581090
Rasperepodviipodvert
2004-01-08 19:58
2004.05.30
Kol


1-1084698515
Евгений2
2004-05-16 13:08
2004.05.30
малелький вопрос по DLL


3-1083844894
alex123
2004-05-06 16:01
2004.05.30
Изменение размера поля


1-1084607897
_Druid_
2004-05-15 11:58
2004.05.30
Вопрос по Hotkey


9-1075885289
Rudi
2004-02-04 12:01
2004.05.30
Вектор нормали