Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > EXIT


Автор: BraM's 2.7.2004, 17:06
А почему у меня exit не выбрасывает из функций и процедур?

Автор: p0s0l 2.7.2004, 18:34
Приведи код

Автор: Bratsman 3.7.2004, 09:10
BraM's - это я на работе. Bratsman - дома.

p0s0l, код такой.

type
TMyClass = class
protected
F: File;
.....
end;


function TMyClass.OpenRead(FileName): boolean;
begin
AssignFile(F , FileName);
{$I-}
Reset(F , 1);
{$I+}
if IOResult <> 0 then begin
result := false;
exit;
end;
{дальше код продолжается}
end;

Так вот. Если файл не существует, то она проходит по конструкции exit, после чего идёт в тот код, который называется {дальше код продолжается}. И ещё несколько подобных ситуаций... Непример, не сделать проверку на ноль...

Может есть в Delfi такая же инструкция, как return в С++?

Автор: p0s0l 3.7.2004, 10:41
Видимо глюки, раз такое происходит. Этот странный глюк - уже при компиляции должен генериться такой глючный код...
Exit - это и есть аналог return, после неё прога должна по смыслу переходить на последнюю строчку end;
Ну что можно посоветовать - используй else:
Код
function TMyClass.OpenRead(FileName): boolean;
begin
AssignFile(F , FileName);
{$I-}
Reset(F , 1);
{$I+}
if IOResult <> 0 then result := false
else
begin
 {дальше код продолжается}
end;
end;



Автор: Maverick 3.7.2004, 11:04
Bratsman
Так как написано у тебя - это в любом случае так называемый плохой тон в программировании... вроде использования goto и тому подобное... Как говориться работает, но.... всегда можно обйтись без этих оперторов...
Лучше послушайся p0s0l...

Автор: RA 3.7.2004, 20:01
Попробуй обойти эту лажу через Label

Автор: z-END 4.7.2004, 19:50
Maverick
ну если говорить про дурной тон, тогда вообще не чере IOResult работать надо, а через try...except
типа так:
Код
AssignFile (F , FileName);
Result := true;
try
 Reset (F , 1);
  ....
 {код}
except
result := false;
end;
CloseFile (F);
end;

Автор: p0s0l 4.7.2004, 20:09
nJIaKca.spb, тогда уж CloseFile надо засунуть перед except, иначе может быть ситуация, когда закрывается не открытый файл...


Автор: Albinos_x 5.7.2004, 01:30

тогда уж лучше использовать try ... finnaly ... и CloseFile после finnaly вставлять.

Автор: p0s0l 5.7.2004, 09:10
Albinos_x, так будет появляться exception... А ему это вряд ли надо...


Автор: <Spawn> 5.7.2004, 16:05
Тогда уже, соединив все вместе, получится этоsmile.gif smile.gif smile.gif

Код
try
 try
   ...
 finally
   CloseFile(f);
 end;
except
 Result := False
end;

Автор: Guest 6.7.2004, 04:10
2 PosOl
Цитата

Exit - это и есть аналог return

Ты это серьезно????

Автор: Medved 6.7.2004, 06:28
Цитата(Guest @ 6.7.2004, 07:10)
2 PosOl
Цитата

Exit - это и есть аналог return

Ты это серьезно????

И я о том же! Как это так, аналог?!

Автор: p0s0l 9.7.2004, 14:40
Цитата
Тогда уже, соединив все вместе, получится это 


Код 
try
try
   ...
finally
   CloseFile(f);
end;
except
Result := False
end;

smile.gif Но это лишне, т.к. в случае try ... closefile except ... end до CloseFile всё равно доберётся только в случае успеха предыдущих операций...

Цитата
Цитата (Guest @ 6.7.2004, 07:10)
2 PosOl

Цитата 

Exit - это и есть аналог return


Ты это серьезно????

И я о том же! Как это так, аналог?!

Люди, мож я че не понимаю, но единственное отличие exit от return в том, что в exit нельзя указать результат функции, это надо делать через Result := ...; А в return он указывается непосредственно...
Или, Pegas, ты меня разыгрываешь ?...

Автор: Maverick 9.7.2004, 17:50
Цитата
единственное отличие exit от return в том, что в exit нельзя указать результат функции, это надо делать через Result := ...; А в return он указывается непосредственно...

Этого мало? В принципе, тот же танк, только на колесах и без дула... smile.gif

Автор: p0s0l 9.7.2004, 21:28
А может тот же танк с дулом, только без колёс ?... smile.gif (поймешь ли правильно... ?)

Похоже, тема ушла куда-то не туда, так что закрываю...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)