Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Как выйти из for цикла? |
Автор: Wowa 16.7.2002, 23:33 |
Думал, что смогу отделаться через last, так не получилось ![]() |
Автор: Baa 16.7.2002, 23:45 | ||
break ![]() |
Автор: Максим 2.10.2002, 20:11 |
Выход из цикла, помойму команда "EXIT"; |
Автор: Baa 2.10.2002, 20:16 | ||||
Exit совершает ничто иное как безусловный переход в конец процедуры (jmp end;) т.е. выход из неё.
|
Автор: Song 2.10.2002, 23:12 |
Если вызов Exit производится внутри цикла, то компилятор автоматически сначала подставляет Break. Если вызов Exit идёт и блока try .. finally .. end то компилятор автоматически подставляет Abort Так что не всё так безусловно. |
Автор: Baa 3.10.2002, 02:06 | ||
Буду знать...а переход и в том и в другом случае делается безусловный |
Автор: Baa 3.10.2002, 03:47 | ||
procedure TForm1.Button1Click(Sender: TObject); begin while true do begin ShowMessage ('Test'); Exit; end; ShowMessage ('This will never happen'); end; А какая разница? Попробуй вместо Exit поставить break... Exit - это выход из процедуры без каких либо подставлений... Как проверить? смотрим код: jmp +$0a А куда это мы прыгаем? правильно, прямо на ret в обход последней функции...Так что все таки это безусловный выход из процедуры. |
Автор: Song 3.10.2002, 06:20 |
Нет, здесь вызов выхода из текущей обработки и выход обрабатывается одноврменно, через стёк т.е. через трассировку или подставкой чего-нить в код Вы не проверите, поэтому придется мне поверить на слово ![]() |
Автор: Baa 3.10.2002, 09:20 |
Вобщем, так или иначе, если мы хотим, чтобы все, что идет после цикла выполнилось Exit никак не подходит ![]() |
Автор: Ampersand 3.10.2002, 23:38 |
Вообще Паскаль задумывался как строгий, структурный язык. Соответственно, всякие вольности типа выхода из процедуры в любой точке и произвольное прекращение цикла в нем не допускаются... В Дельфях можт уже все испортили, не знаю... А вообще в данном случае классика - замена for на while. Еще можно попробовать принудительно переменную цикла увеличить до верхней границы. На крайняк goto... |
Автор: Vit 4.10.2002, 00:29 | ||
1) Exit и Break появились в Turbo Pascal (не то в 6.0, не то в 7.0) 2) На чистом Паскале можно программировать наверное лишь чистую математику, да простейшие cgi. В связи с полным отсутствием интерфейса, экспорта функций, объектов и т.п. использование чистого классического Паскаля практически невозможно. 3) В настоящее время существует лишь одна распространённая реализация Паскаль сделанная Борландом (только не надо говорить что есть еще много - есть то они есть, да пользователей их пренебрежительно мало), следовательно стандарт Паскаля De Facto определяют версии от Borland (точно так же как Basic определяется MS) |
Автор: rhf 4.10.2002, 01:27 |
2 Ampersand, вообщето break (выход из цикла) и exit (выход из процедуры/функции) идут из старого доброго паскаля и я рад, что никто ничего НЕ испортил и НЕ выкинул их из Object Pascal. И давайте не будем вспоминать про goto ![]() |
Автор: Vit 4.10.2002, 02:20 | ||
Нет, не идут! В спецификации Паскаля их нет. Они появились, как я уже говорил, в Tp6 (это примерно 1993 год), до этого их ни в одной реализации вообще не было. А так называемый Object Pascal появился примерно тогда-же в том же TP6 c появлением Turbo Vision, ни в стандарте Паскаля, ни в одной реализации Паскаля до того никаких объектов вообще не было. Добавление объектов и разработка спецификации Object Pascal целиком заслуга Борланд, другие реализации Object Pascal появились только лет через 5 после Object Pascal от Борланд и практически базировались на последнем. |
Автор: Song 4.10.2002, 02:40 |
Моя версия Tp7 Ну уж никак не <=Tp5 :-) |
Автор: Vit 4.10.2002, 02:55 | ||
Это точно, в TP5.5 абсолютно точно не было ни объектов, ни exit, ни break (только Halt был для любителей ![]() |
Автор: Chingachguk 4.10.2002, 03:39 |
Да, недавно с удивлением обнаружил, что в tp ~ 6 -5 версии нету break... Немного не в тему, но, возможно, покажется забавным: до недавнего времени я писал в конторе на языке Clarion(DOS). Так вот, как-то я с удивлением обнаружил, что есть "кларионисты", которые совершенно серьезно считали, что написав подряд несколько break, можно выйти сразу из цикла вложенности больше 1 ! Выглядело это так: loop ! Это так цикл выглядит - пустой loop loop ! Якобы выходим сразу на метку Done break break break . . . Done: Эксперимент показал, что нифига ж))) goto форева ! |
Автор: rhf 4.10.2002, 04:51 |
2 Vit, под "старым добрым паскалем" я имел ввиду BP 7.0 ![]() |
Автор: Vit 4.10.2002, 04:59 | ||
Ну для кого какой, для меня "старый добрый" - это тот Паскаль с которого я начинал - Pascal под RT11SJ, это был примерно 1987 год(уж не знаю кто его производитель), а если "старый добрый" для x86 то Turbo Pascal 3.0 - ещё без оболочки, это примерно 1990 год. Может я на год-два с датами ошибся - давно это было. |