![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| np9mi7 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Добрый день...
Такой вопросик: Для вылета из цикла нужен оператор:
Для вылета из функции:
А кокой оператор нужен для вылета из блока???
ЗАранее благодарен за ответ... Это сообщение отредактировал(а) arajan - 27.7.2004, 19:16 |
||||||
|
|||||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
goto
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Ничего другого для такой нужды в голову не приходит (в смысле оператора по типу break и return помоему нет). Добавлено @ 19:25 _hunter, был на минуту быстрее... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
можно блок оформить так:
типа цикл который один раз выполняется. изврат, конечно. я за гоуту. |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
А нельзя что нить с исключениями намудрить?
Хотя я за goto.. --------------------
|
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Такого оператора нет. goto вообще никогда не пользуйся! Для подобных целей я делал цикл типа AndyY, только for(;;) А вообще пользуйся исключительными ситуациями. А что за задачу ты решаешь? |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Шаблон мышления. В данном случае GOTO - лучший вариант. -------------------- С уважением. Gray. |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Как будто
do { ... break; ... } while(0); и { ... goto label; ... } label: это не одно и тоже. Лучше подумать надо кодом, может получится избавиться от безусловного перехода, а не придумывать такую забавную маскировку. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Да нет, не шаблон. И вариант тоже далеко не лучший, скорее худший. Я лично ни разу им не пользовался. Разве что в детстве, в бейсике. Ты уверен, что деструкторы будут вызваны, если выйти из блока по goto? |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Это сообщение отредактировал(а) chipset - 28.7.2004, 09:21 --------------------
|
||||
|
|||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Ну да, это действительно лучший вариант, наверное...
Я вот делаю блоки, когда не хочу, чтобы переменые временные долго жили. Как раз под решение исключениями вопрос. |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Олег М
Вы видимо опытный программист, и поэтому должны знать, что нет абсолютно стандартных и готовых решений, подходящих для всего. Тем более нельзя давать советы начинающим типа "Никогда не исполоьзуй goto". Да, его использование в БОЛЬШИНСТВЕ случаев нежелательно. Но бываю случаи, когда применение GOTO может существенно упростить код и ЧИТАБЕЛЬНОСТЬ программы. В качастве аргумента приведу статью: Вадим Сабашный "Оператор GOTO и преобразование потока управления" Использованы материалы статей: E. Dijkstra "Go to statement considered harmful", Communications of the ACM, 1968. D. Knuth "Structured Programming with Go to statement", 1974 B. Baker "An Algorithm for Structuring Flowgraphs", Journal of the ACM, 1977. Crw
-------------------- С уважением. Gray. |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
chipset
exception, в отличии от goto, далеко не бесплатны. Олег М странно судить о том, что вы не использовали. goto удобен во многих случаях - например, чтобы выйти из вложенного цикла. for(;;) крутится бесконечно, а do{}while(0) исполняется один раз - и соответственно больше похож на тот оператор, что просит arajan. |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
AndyY и gray_k, вы наверное правы, просто мне однажды, ещё в институте, посоветовали им не пользоваться, обоснованно посоветовали, я и не пользуюсь, хотя почему - не помню.
А деструкторы, оказывается, всё-таки вызываются - на метке, где бы она ни стояла. Вот так. Я не знал. Кстати это может внести конкретную путаницу в программу. |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Любопытная статья. Подводит черту. Насчет обработчика в конце процедуры: есть такая штука как Sentry - просто класс, конструктор которого выполняет инициализацию, а деструктор освобождает че надо. Пишем первой строчкой функции
Sentry guard; , и все. AndyY
Не бесплатны. Но, если честно, не сильно дороги. А делать большие блоки редко требуется, по крайней мере мне вообще не требовалось больше 10-20 строк не сильно мудреного кода, и всего несколько раз. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |