Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизGoto Найти похожие ветки
← →
Yegorchic © (2004-04-20 21:40) [0]Здрасте все... Есть такой код:
implementation
{$R *.dfm}
label labelX;
procedure XXXXXXX;
...
goto labelX;
...
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;
end.
Что не так? Почему он пишет "Label "labelX" is not declared in current procedure"?
Может это и глупый вопрос (я не знаю), но дайте на него ответ.
Заренее спасибо.
← →
Yegorchic © (2004-04-20 21:40) [0]Здрасте все... Есть такой код:
implementation
{$R *.dfm}
label labelX;
procedure XXXXXXX;
...
goto labelX;
...
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;
end.
Что не так? Почему он пишет "Label "labelX" is not declared in current procedure"?
Может это и глупый вопрос (я не знаю), но дайте на него ответ.
Заренее спасибо.
← →
Rouse_ © (2004-04-20 21:42) [1]> Label "labelX" is not declared in current procedure
Переменная labelX не объявлена в текущей процедуре.
Что еще не понятно? Это ж тебе не Бэйсик.
И вообщето Goto и Label - моветон...
← →
Rouse_ © (2004-04-20 21:42) [1]> Label "labelX" is not declared in current procedure
Переменная labelX не объявлена в текущей процедуре.
Что еще не понятно? Это ж тебе не Бэйсик.
И вообщето Goto и Label - моветон...
← →
Mihey © (2004-04-20 22:44) [2]Угу, label только в пределах блока (т.е. внутри процедуры, функции).
← →
Mihey © (2004-04-20 22:44) [2]Угу, label только в пределах блока (т.е. внутри процедуры, функции).
← →
ASvencim © (2004-04-20 22:50) [3]И вообще, приличные люди goto не используют (не пойму почему)
← →
ASvencim © (2004-04-20 22:50) [3]И вообще, приличные люди goto не используют (не пойму почему)
← →
Dimaxx © (2004-04-20 23:12) [4]Просто использование этого оператора не является правилом хорошего программера (где-то читал). Попробуй обойтись без него.
← →
Dimaxx © (2004-04-20 23:12) [4]Просто использование этого оператора не является правилом хорошего программера (где-то читал). Попробуй обойтись без него.
← →
Gero © (2004-04-20 23:19) [5]
> не пойму почему
Потому, что Вы его должным образом и не использовали.
Помню, у меня когда-то очень давно довольно большая программа на Паскале.
Я тогда был совсем новичком в программировании, процедуры почти не использовал, а вместо них - goto.
Поначалу было ничего.
Но когда количество label"ов перевалило за 30...
И все они были сложно сплетены...
После этого я дал себе слово по мере возможности не использовать goto.
Что и делаю.
← →
Gero © (2004-04-20 23:19) [5]
> не пойму почему
Потому, что Вы его должным образом и не использовали.
Помню, у меня когда-то очень давно довольно большая программа на Паскале.
Я тогда был совсем новичком в программировании, процедуры почти не использовал, а вместо них - goto.
Поначалу было ничего.
Но когда количество label"ов перевалило за 30...
И все они были сложно сплетены...
После этого я дал себе слово по мере возможности не использовать goto.
Что и делаю.
← →
Игорь Шевченко © (2004-04-21 00:03) [6]
> После этого я дал себе слово по мере возможности не использовать
> goto.
Всякий овощ приносит пользу, будучи употребленным в надлежащее время надлежащим образом. В том числе и goto.
← →
Игорь Шевченко © (2004-04-21 00:03) [6]
> После этого я дал себе слово по мере возможности не использовать
> goto.
Всякий овощ приносит пользу, будучи употребленным в надлежащее время надлежащим образом. В том числе и goto.
← →
Курдль © (2004-04-21 00:16) [7]
> Всякий овощ приносит пользу, будучи употребленным в надлежащее
> время надлежащим образом. В том числе и goto.
Не согласен. Не для того тужился Никлаус Вирт над Паскалем, чтобы в нем Goto и Label пихали куда ни попадя! Если есть острая необходимость воспользоваться "машиноподобными кодами" - сделайте ассемблерную вставочку (это еще можно как-то объяснить погоней за производительностью). Но Паскаль тем и хорош, что заставляет соблюдать модульную строгость программы. Для этого масса возможностей - "операторные скобки"begin ... end
, процедуры, функции...
← →
Курдль © (2004-04-21 00:16) [7]
> Всякий овощ приносит пользу, будучи употребленным в надлежащее
> время надлежащим образом. В том числе и goto.
Не согласен. Не для того тужился Никлаус Вирт над Паскалем, чтобы в нем Goto и Label пихали куда ни попадя! Если есть острая необходимость воспользоваться "машиноподобными кодами" - сделайте ассемблерную вставочку (это еще можно как-то объяснить погоней за производительностью). Но Паскаль тем и хорош, что заставляет соблюдать модульную строгость программы. Для этого масса возможностей - "операторные скобки"begin ... end
, процедуры, функции...
← →
Gero © (2004-04-21 00:22) [8]
Игорь Шевченко © (21.04.04 00:03)
Обратите внимание:
> После этого я дал себе слово по мере возможности не использовать
> goto
← →
Gero © (2004-04-21 00:22) [8]
Игорь Шевченко © (21.04.04 00:03)
Обратите внимание:
> После этого я дал себе слово по мере возможности не использовать
> goto
← →
Алхимик © (2004-04-21 00:30) [9]>[7] Курдль © (21.04.04 00:16)
procedure Test(Param1..ParamN : TMyType);
var
i,j,k,m,... : integer;
begin
<создание чего-то>
for i := 1 to 1000000 do begin
for j := 1 to 1000000 do begin
for k := 1 to 1000000 do begin
repeat
<жуткие вычисления>
if <лажа> then goto FINISH;
until m = -1;
end;
end;
end;
<вывод результатов жутких вычислений>
FINISH:
<уничтожение чего-то>
end;
Удобнее с GOTO?
← →
Алхимик © (2004-04-21 00:30) [9]>[7] Курдль © (21.04.04 00:16)
procedure Test(Param1..ParamN : TMyType);
var
i,j,k,m,... : integer;
begin
<создание чего-то>
for i := 1 to 1000000 do begin
for j := 1 to 1000000 do begin
for k := 1 to 1000000 do begin
repeat
<жуткие вычисления>
if <лажа> then goto FINISH;
until m = -1;
end;
end;
end;
<вывод результатов жутких вычислений>
FINISH:
<уничтожение чего-то>
end;
Удобнее с GOTO?
← →
Курдль © (2004-04-21 00:33) [10]
> if <лажа> then goto FINISH;
if <лажа> then break;
> Удобнее с GOTO?
Нет! И еще мэтодически нэверно!
← →
Курдль © (2004-04-21 00:33) [10]
> if <лажа> then goto FINISH;
if <лажа> then break;
> Удобнее с GOTO?
Нет! И еще мэтодически нэверно!
← →
Anatoly Podgoretsky © (2004-04-21 00:33) [11]ASvencim © (20.04.04 22:50) [3]
Потому что приличные люди.
← →
Anatoly Podgoretsky © (2004-04-21 00:33) [11]ASvencim © (20.04.04 22:50) [3]
Потому что приличные люди.
← →
Mihey © (2004-04-21 00:35) [12]Goto lives and rules форева!!!!
← →
Mihey © (2004-04-21 00:35) [12]Goto lives and rules форева!!!!
← →
Almaz © (2004-04-21 00:41) [13]
> Курдль © (21.04.04 00:33) [10]
>
> > if <лажа> then goto FINISH;
>
> if <лажа> then break;
>
А теперь задумайтесь, правомерна ли такая замена ;) А она не правомерна, т.к. break в данном случае прервет выполнение только цикла repeat ... until, а в исходном варианте с goto прерывается выполнение всех вложенных циклов. Альтернатива goto здесь - это использование механизма исключений, но я бы использовал именно goto - это один из немногих случаев, где эта конструкция оправдана.
Удачи.
← →
Almaz © (2004-04-21 00:41) [13]
> Курдль © (21.04.04 00:33) [10]
>
> > if <лажа> then goto FINISH;
>
> if <лажа> then break;
>
А теперь задумайтесь, правомерна ли такая замена ;) А она не правомерна, т.к. break в данном случае прервет выполнение только цикла repeat ... until, а в исходном варианте с goto прерывается выполнение всех вложенных циклов. Альтернатива goto здесь - это использование механизма исключений, но я бы использовал именно goto - это один из немногих случаев, где эта конструкция оправдана.
Удачи.
← →
Игорь Шевченко © (2004-04-21 00:44) [14][8] Gero © (21.04.04 00:22)
Понимаете, я в программах на паскале его (goto) не использую вообще не потому, что давал себе какие-либо слова, а потому что просто неудобно :) -метку надо отдельно объявлять в начале. Да и код сам собой получается таким, что не видно необходимости в использовании этого оператора.
Хотя, если он введен в синтаксис языка, то будучи употребленым надлежащим образом в надлежащее время, принесет пользу.
С уважением,
← →
Игорь Шевченко © (2004-04-21 00:44) [14][8] Gero © (21.04.04 00:22)
Понимаете, я в программах на паскале его (goto) не использую вообще не потому, что давал себе какие-либо слова, а потому что просто неудобно :) -метку надо отдельно объявлять в начале. Да и код сам собой получается таким, что не видно необходимости в использовании этого оператора.
Хотя, если он введен в синтаксис языка, то будучи употребленым надлежащим образом в надлежащее время, принесет пользу.
С уважением,
← →
Курдль © (2004-04-21 00:46) [15]
> Almaz ©
Каюсь! :)
← →
Курдль © (2004-04-21 00:46) [15]
> Almaz ©
Каюсь! :)
← →
Verg © (2004-04-21 05:55) [16]
procedure Test(Param1..ParamN : TMyType);
var
i,j,k,m,... : integer;
begin
<создание чего-то>
try
for i := 1 to 1000000 do begin
for j := 1 to 1000000 do begin
for k := 1 to 1000000 do begin
repeat
<жуткие вычисления>
if <лажа> then exit;//goto FINISH;
until m = -1;
end;
end;
end;
<вывод результатов жутких вычислений>
finally
// FINISH:
<уничтожение чего-то>
end;
end;
← →
Verg © (2004-04-21 05:55) [16]
procedure Test(Param1..ParamN : TMyType);
var
i,j,k,m,... : integer;
begin
<создание чего-то>
try
for i := 1 to 1000000 do begin
for j := 1 to 1000000 do begin
for k := 1 to 1000000 do begin
repeat
<жуткие вычисления>
if <лажа> then exit;//goto FINISH;
until m = -1;
end;
end;
end;
<вывод результатов жутких вычислений>
finally
// FINISH:
<уничтожение чего-то>
end;
end;
← →
Gero © (2004-04-21 07:43) [17]
> Verg © (21.04.04 05:55)
procedure Test(Param1..ParamN : TMyType);
procedure ThreeForAndRepeat;
var
i,j,k,m,... : integer;
begin
for i := 1 to 1000000 do begin
for j := 1 to 1000000 do begin
for k := 1 to 1000000 do begin
repeat
<жуткие вычисления>
if <лажа> then exit; // no problem
until m = -1;
end;
end;
end;
<вывод результатов жутких вычислений>
end;
begin
<создание чего-то>
try
ThreeForAndRepeat;
finally
<уничтожение чего-то>
end;
end;
Катит? ;)
← →
Gero © (2004-04-21 07:43) [17]
> Verg © (21.04.04 05:55)
procedure Test(Param1..ParamN : TMyType);
procedure ThreeForAndRepeat;
var
i,j,k,m,... : integer;
begin
for i := 1 to 1000000 do begin
for j := 1 to 1000000 do begin
for k := 1 to 1000000 do begin
repeat
<жуткие вычисления>
if <лажа> then exit; // no problem
until m = -1;
end;
end;
end;
<вывод результатов жутких вычислений>
end;
begin
<создание чего-то>
try
ThreeForAndRepeat;
finally
<уничтожение чего-то>
end;
end;
Катит? ;)
← →
Verg © (2004-04-21 07:49) [18]
> Gero © (21.04.04 07:43) [17]
Катит.
А в чем "изюм"?
← →
Verg © (2004-04-21 07:49) [18]
> Gero © (21.04.04 07:43) [17]
Катит.
А в чем "изюм"?
← →
Gero © (2004-04-21 07:53) [19]
> Verg © (21.04.04 07:49)
В вашем примере finally-то не выполнится.
← →
Gero © (2004-04-21 07:53) [19]
> Verg © (21.04.04 07:49)
В вашем примере finally-то не выполнится.
← →
Verg © (2004-04-21 07:54) [20]
> Gero © (21.04.04 07:53) [19]
Заблуждаешься.
try
finally
end;
- секция finally выполнится в любом случае. Каким бы способом блок try не покинули: continue, break, exit или исключение.
← →
Verg © (2004-04-21 07:54) [20]
> Gero © (21.04.04 07:53) [19]
Заблуждаешься.
try
finally
end;
- секция finally выполнится в любом случае. Каким бы способом блок try не покинули: continue, break, exit или исключение.
← →
Gero © (2004-04-21 07:59) [21]
> Verg © (21.04.04 07:54)
Спасибо, не знал.
← →
Gero © (2004-04-21 07:59) [21]
> Verg © (21.04.04 07:54)
Спасибо, не знал.
← →
Gero © (2004-04-21 08:05) [22]
> Verg © (21.04.04 07:54)
То есть, если в блоке try я вызову Exit, то это будет выход только из try?
← →
Gero © (2004-04-21 08:05) [22]
> Verg © (21.04.04 07:54)
То есть, если в блоке try я вызову Exit, то это будет выход только из try?
← →
Verg © (2004-04-21 08:15) [23]
> Gero © (21.04.04 08:05) [22]
>
> > Verg © (21.04.04 07:54)
>
> То есть, если в блоке try я вызову Exit, то это будет выход
> только из try?
Почему же, и из процедуры тоже, но перед этим выполнится(нятся) все секции finally этого(их) try блока(ов).procedure F1(Par, Par2 : boolen);
begin
try
if Par then exit;
finally;
ShowMessage("Выход 1");
if Par2 then exit;
end;
ShowMessage("Выход 2");
end;
Поэкп. с этой ф-цией.
← →
Verg © (2004-04-21 08:15) [23]
> Gero © (21.04.04 08:05) [22]
>
> > Verg © (21.04.04 07:54)
>
> То есть, если в блоке try я вызову Exit, то это будет выход
> только из try?
Почему же, и из процедуры тоже, но перед этим выполнится(нятся) все секции finally этого(их) try блока(ов).procedure F1(Par, Par2 : boolen);
begin
try
if Par then exit;
finally;
ShowMessage("Выход 1");
if Par2 then exit;
end;
ShowMessage("Выход 2");
end;
Поэкп. с этой ф-цией.
← →
Gero © (2004-04-21 08:18) [24]> Verg © (21.04.04 08:15)
Все, я Вас понял. Спасибо.
← →
Gero © (2004-04-21 08:18) [24]> Verg © (21.04.04 08:15)
Все, я Вас понял. Спасибо.
← →
Verg © (2004-04-21 08:20) [25]Ты там увидишь, что Exit из секции finally вообще делать нельзя (кстати, забыл еще там goto в секции try - тоже не даст сделать).
если par1 = true, то произойдет "Выход 1", но "Выход 2" выполнен не будет. Если Par1 = False, то будет и "Выход 1" и "Выход 2".
← →
Verg © (2004-04-21 08:20) [25]Ты там увидишь, что Exit из секции finally вообще делать нельзя (кстати, забыл еще там goto в секции try - тоже не даст сделать).
если par1 = true, то произойдет "Выход 1", но "Выход 2" выполнен не будет. Если Par1 = False, то будет и "Выход 1" и "Выход 2".
← →
Verg © (2004-04-21 08:24) [26]Вот для упражнений....
procedure F1(Par: boolean);
label l1;
begin
try
if Par then exit;
// goto l1; // Ошибка
finally;
ShowMessage("Выход 1");
// exit; // Ошибка
end;
l1:;
ShowMessage("Выход 2");
end;
← →
Verg © (2004-04-21 08:24) [26]Вот для упражнений....
procedure F1(Par: boolean);
label l1;
begin
try
if Par then exit;
// goto l1; // Ошибка
finally;
ShowMessage("Выход 1");
// exit; // Ошибка
end;
l1:;
ShowMessage("Выход 2");
end;
← →
vengo (2004-04-21 10:33) [27]implementation
{$R *.dfm}
label labelX;
procedure XXXXXXX;
...
goto labelX; //здесь не работает
...
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;
begin
...............
goto labelX; //здесь goto работает
...............
labelX:
...............
end.
← →
vengo (2004-04-21 10:33) [27]implementation
{$R *.dfm}
label labelX;
procedure XXXXXXX;
...
goto labelX; //здесь не работает
...
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;
begin
...............
goto labelX; //здесь goto работает
...............
labelX:
...............
end.
← →
panov © (2004-04-21 10:38) [28]бред, простите за выражение.
← →
panov © (2004-04-21 10:38) [28]бред, простите за выражение.
← →
PVOzerski © (2004-04-21 11:26) [29]IMHO, не надо превращать борьбу с goto в какой-то "религиозный" обряд. Ну, можно выскочить из цикла через сочетания exit и try. А зачем огород-то такой городить? И читаемости кода это не прибавит (а я вообще, например, только недавно узнал, что при выходе по exit всё равно отрабатывает секция finally), и "тормозов", связанных с включением кода, ответственного за обработку исключений, прибавит.
← →
PVOzerski © (2004-04-21 11:26) [29]IMHO, не надо превращать борьбу с goto в какой-то "религиозный" обряд. Ну, можно выскочить из цикла через сочетания exit и try. А зачем огород-то такой городить? И читаемости кода это не прибавит (а я вообще, например, только недавно узнал, что при выходе по exit всё равно отрабатывает секция finally), и "тормозов", связанных с включением кода, ответственного за обработку исключений, прибавит.
← →
Андрей Сенченко © (2004-04-21 11:37) [30]PVOzerski © (21.04.04 11:26) [29]
Ну откровенно говоря и само GOTO с читаемостью кода мало сочетается, а вот метод try - exit - finally хорош безусловно.
Лично я вываливался из вложенных циклов boolean-овым флагом и break-ами, что тоже не очень удобно.
← →
Андрей Сенченко © (2004-04-21 11:37) [30]PVOzerski © (21.04.04 11:26) [29]
Ну откровенно говоря и само GOTO с читаемостью кода мало сочетается, а вот метод try - exit - finally хорош безусловно.
Лично я вываливался из вложенных циклов boolean-овым флагом и break-ами, что тоже не очень удобно.
← →
Verg © (2004-04-21 12:01) [31]
> PVOzerski © (21.04.04 11:26) [29]
Зря ты думаешь, что это "обряд".
В том примере try finally и так было бы желательно поставить, так как есть <создаем чего-то> и <уничтожаем чего-то>. Так почему бы двух зайцев сразу не заколбасить? :)
← →
Verg © (2004-04-21 12:01) [31]
> PVOzerski © (21.04.04 11:26) [29]
Зря ты думаешь, что это "обряд".
В том примере try finally и так было бы желательно поставить, так как есть <создаем чего-то> и <уничтожаем чего-то>. Так почему бы двух зайцев сразу не заколбасить? :)
← →
Григорьев Антон (2004-04-21 12:06) [32]К сожалению, в Delphi очень не хватает оператора Exit а-ля Ада, в котором можно явно указать, из скольки вложенных циклов надо выйти.
← →
Григорьев Антон (2004-04-21 12:06) [32]К сожалению, в Delphi очень не хватает оператора Exit а-ля Ада, в котором можно явно указать, из скольки вложенных циклов надо выйти.
← →
KSergey © (2004-04-21 12:23) [33]> Григорьев Антон (21.04.04 12:06)
Есть! Завется GOTO ;)
Мне думается, что в Aду ввели этот Exit лишь бы не использовать goto. Чтобы потом можно было сказать "а у нас гото нет, мы - крутой язык". Т.к. по сути это все равно одно и тоже получается.
← →
KSergey © (2004-04-21 12:23) [33]> Григорьев Антон (21.04.04 12:06)
Есть! Завется GOTO ;)
Мне думается, что в Aду ввели этот Exit лишь бы не использовать goto. Чтобы потом можно было сказать "а у нас гото нет, мы - крутой язык". Т.к. по сути это все равно одно и тоже получается.
← →
ZrenBy © (2004-04-21 12:29) [34]Я как-то год-полтора назад одному противнику goto
предлагал переписать одну процедурку, использующую goto,
без использования оного.
Но при этом ставил два условия.
1. Не должно быть вызовов функций/процедур.
2. Не должно быть повторяющегося кода.
Противник goto тогда вызов не принял.
← →
ZrenBy © (2004-04-21 12:29) [34]Я как-то год-полтора назад одному противнику goto
предлагал переписать одну процедурку, использующую goto,
без использования оного.
Но при этом ставил два условия.
1. Не должно быть вызовов функций/процедур.
2. Не должно быть повторяющегося кода.
Противник goto тогда вызов не принял.
← →
KSergey © (2004-04-21 12:53) [35]> 1. Не должно быть вызовов функций/процедур.
Странноватое требование...
Т.е. условия таковы, чтобы этого в принципе нельзя было сделать??
Для меня апогеем, убедившим в том, что использовать goto - вполне легитимно, явился такой фрагмент кода в одном примере. Причем я приведу лишь макет, на нем-то все видно, а реальный код был куда больше, со вложенными циклами, весь этот макет не сразу проглядывался, а потому я долго (минут 20, может я тупой?) силился понять зафиг так было делать (пример будет на паскале):repeat
.......
.......
.......
if ... then continue;
.......
.......
until True;
Я долго не мог понять зачем было делать цикл, который никогда на второй проход не пойдет?? И только через какое-то время таки разглядел это if с continue. Да, goto здесь нет, но так ли уж его формальное отсутствие здесь выигрышно?
← →
KSergey © (2004-04-21 12:53) [35]> 1. Не должно быть вызовов функций/процедур.
Странноватое требование...
Т.е. условия таковы, чтобы этого в принципе нельзя было сделать??
Для меня апогеем, убедившим в том, что использовать goto - вполне легитимно, явился такой фрагмент кода в одном примере. Причем я приведу лишь макет, на нем-то все видно, а реальный код был куда больше, со вложенными циклами, весь этот макет не сразу проглядывался, а потому я долго (минут 20, может я тупой?) силился понять зафиг так было делать (пример будет на паскале):repeat
.......
.......
.......
if ... then continue;
.......
.......
until True;
Я долго не мог понять зачем было делать цикл, который никогда на второй проход не пойдет?? И только через какое-то время таки разглядел это if с continue. Да, goto здесь нет, но так ли уж его формальное отсутствие здесь выигрышно?
← →
Verg © (2004-04-21 13:05) [36]
> Да, goto здесь нет, но так ли уж его формальное отсутствие
> здесь выигрышно?
repeat
........................
........................
GetMem(...);
try
........................
........................
if ... then continue;
........................
........................
finally
FreeMem(....)
end;
........................
........................
until True;
← →
Verg © (2004-04-21 13:05) [36]
> Да, goto здесь нет, но так ли уж его формальное отсутствие
> здесь выигрышно?
repeat
........................
........................
GetMem(...);
try
........................
........................
if ... then continue;
........................
........................
finally
FreeMem(....)
end;
........................
........................
until True;
← →
Fay © (2004-04-21 13:13) [37]Нет никаких причин не использовать goto там, где это удобно.
← →
Fay © (2004-04-21 13:13) [37]Нет никаких причин не использовать goto там, где это удобно.
← →
WebErr © (2004-04-21 13:22) [38]Должна быть в Делфи процедура неокального перехода по метке, так как в Borland C++ (ANSI standard) она есть! Просто эта тема непопулярна, поэтому ей редко уделяют внимание в книгах, так как всегда можно обойтись без goto тем более нелокального (не очевидный, но факт!).
← →
WebErr © (2004-04-21 13:22) [38]Должна быть в Делфи процедура неокального перехода по метке, так как в Borland C++ (ANSI standard) она есть! Просто эта тема непопулярна, поэтому ей редко уделяют внимание в книгах, так как всегда можно обойтись без goto тем более нелокального (не очевидный, но факт!).
← →
Григорьев Антон (2004-04-21 13:36) [39]
> KSergey © (21.04.04 12:23) [33]
> > Григорьев Антон (21.04.04 12:06)
>
> Есть! Завется GOTO ;)
>
> Мне думается, что в Aду ввели этот Exit лишь бы не использовать
> goto. Чтобы потом можно было сказать "а у нас гото нет,
> мы - крутой язык". Т.к. по сути это все равно одно и тоже
> получается.
В том-то и дело, что не то же самое. Многоуровневый Exit годится только для выхода из цикла, а с goto, помимо этого, можно таких дел наворотить, что потом ни с какой поллитрой не разберёшься.
← →
Григорьев Антон (2004-04-21 13:36) [39]
> KSergey © (21.04.04 12:23) [33]
> > Григорьев Антон (21.04.04 12:06)
>
> Есть! Завется GOTO ;)
>
> Мне думается, что в Aду ввели этот Exit лишь бы не использовать
> goto. Чтобы потом можно было сказать "а у нас гото нет,
> мы - крутой язык". Т.к. по сути это все равно одно и тоже
> получается.
В том-то и дело, что не то же самое. Многоуровневый Exit годится только для выхода из цикла, а с goto, помимо этого, можно таких дел наворотить, что потом ни с какой поллитрой не разберёшься.
← →
Андрей Сенченко © (2004-04-21 13:36) [40]Verg © (21.04.04 13:05) [36]
В приведенном Вами коде ничто не мешает поставить условие
if false goto
вместо
continue
..
until true;
GetMem() - FreeMem реализуется и в этом случае без использования защищенных блоков.
← →
Андрей Сенченко © (2004-04-21 13:36) [40]Verg © (21.04.04 13:05) [36]
В приведенном Вами коде ничто не мешает поставить условие
if false goto
вместо
continue
..
until true;
GetMem() - FreeMem реализуется и в этом случае без использования защищенных блоков.
Страницы: 1 2 3 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.67 MB
Время: 0.045 c