реклама на сайте
подробности

 
 
> Оператор GoTo, безусловный переход или правила хорошего тона
J_B
сообщение Sep 29 2006, 15:13
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 17-01-06
Пользователь №: 13 275



Почему считается, что "нехорошо" использовать данного оператора?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ValBag
сообщение Oct 25 2007, 12:45
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 15-03-07
Пользователь №: 26 183



REAL
Шашечек конечно не надо, но и ехать не получается. Глохнем на полпути. Это я так,
беззлобно, скорее в отношении себя.

1. Общие принципы избавления от GoTo мне понятны, но не до конца. Самое проблемное место,
переход из вложенных циклов вверх, более чем на начало вложенного цикла. Во втором и третьем Ваших вариантах первый оператор continue должен передаваь управление (по условию его действия) не на набор кода while(1), а на следующий цикл вложенного while(flz==0), в теле которого он появился? Буду рад, если ошибаюсь.
В первом варианте программы, еще не разобрался, комментарии Ваши не везде, а до Вашего мастерства мне далековато.

2. typedef enum {delay_50ms, delay_1s} delay_code. А typedef здесь зачем?, delay_code это
переменная объявленного перечисления с уже заданным типом.

Сообщение отредактировал ValBag - Oct 25 2007, 12:47
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 25 2007, 22:04
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ValBag @ Oct 25 2007, 14:45) *
Самое проблемное место, переход из вложенных циклов вверх, более чем на начало вложенного цикла. Во втором и третьем Ваших вариантах первый оператор continue должен передаваь управление (по условию его действия) не на набор кода while(1), а на следующий цикл вложенного while(flz==0), в теле которого он появился?
Тьху, это я ошибся. Конечно, оно идёт не туда, куда надо :-(
Ну плохо "втупую" переводится "спагетти" из goto в циклы. В первом варианте, когда я "понял, что нужно и написал почти с нуля", надеюсь, ошибок нет :-)
А тут надо что-то в таком духе рожать:
Код
        init_timeout();    // Задержка 2-го типа
        while( incod() == codS && !is_expired() ); // пока клавиша не изменилась и таймаут не истёк - ждём
        if( is_expired() ) break; // если таки таймаут - конец набора
    } // это от while(1) "набор кода"


Цитата(ValBag @ Oct 25 2007, 14:45) *
2. typedef enum {delay_50ms, delay_1s} delay_code. А typedef здесь зачем?, delay_code это переменная объявленного перечисления с уже заданным типом.
Нет, если бы не было слова typedef, то это была бы переменная типа неименованного enum с таким-то набором.
А так это перечислимый тип - определяется typedef-ом для того, чтобы не писать лишний раз слово enum везде, где нужно завести переменную этого типа. Вместо
Код
enum moo { moo0, moo1 }; // только объявляем тип, не заводя переменных
void foo( enum moo m) // аргумент этого типа
{
   if( m == moo1) { ...
пишем
Код
typedef enum { moo0, moo1 } moo_t; // тоже объявляем тип, но имя типа теперь из одного слова, без ключевого слова enum
void foo( moo_t m) // аргумент этого типа
{
   if( m == moo1) { ...


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- J_B   Оператор GoTo   Sep 29 2006, 15:13
- - Yura_K   Как я понимаю, этот оператор неявно присутствует в...   Sep 29 2006, 16:02
|- - J_B   Полностью согласен, взять ассемблер - циклов без м...   Sep 29 2006, 16:22
- - ktod   Это филосовский вопрос. И ответ на него будет: ...   Sep 29 2006, 16:46
- - rezident   Гм. Когда-то давно (больше 15 лет назад) у нас в у...   Sep 29 2006, 16:47
- - jorikdima   Я слышал, что причина в том, что не известно будет...   Sep 29 2006, 16:47
- - bodja74   Потому что оператор безусловного перехода не сохра...   Sep 29 2006, 16:56
|- - singlskv   ЦитатаПочему считается, что "нехорошо" и...   Sep 29 2006, 18:05
|- - bodja74   Цитата(singlskv @ Sep 29 2006, 21:05) [Ис...   Sep 29 2006, 20:32
|- - Сергей Борщ   Цитата(bodja74 @ Sep 29 2006, 23:32) И пе...   Sep 29 2006, 21:57
- - CD_Eater   Программу проще понять, если она состоит из станда...   Sep 29 2006, 17:27
|- - muravei   Цитата(CD_Eater @ Sep 29 2006, 21:27) В н...   Sep 29 2006, 17:31
- - artem100   go to не явно присутствует во всех языках всегда ...   Sep 29 2006, 17:51
- - singlskv   Цитата(J_B @ Sep 29 2006, 19:13) Почему с...   Sep 29 2006, 18:39
|- - Леонид Иванович   Единственная ситуация, когда нужен goto, это обраб...   Sep 29 2006, 19:09
- - _artem_   Сколько людей столько и мнений. Если не злоупотреб...   Sep 29 2006, 22:40
|- - zltigo   Цитата(_artem_ @ Sep 30 2006, 01:40) Была...   Sep 30 2006, 06:10
|- - Petka   Цитата(zltigo @ Sep 30 2006, 10:10) На се...   Sep 30 2006, 09:43
|- - zltigo   Цитата(Petka @ Sep 30 2006, 12:43) С испо...   Sep 30 2006, 10:04
|- - Petka   Цитата(zltigo @ Sep 30 2006, 14:04) Цитат...   Sep 30 2006, 14:40
|- - zltigo   Цитата(Petka @ Sep 30 2006, 17:40) Аргуме...   Sep 30 2006, 15:07
- - J_B   Спасибо высказавшимся, просто написал переход от д...   Sep 30 2006, 04:24
- - CD_Eater   Цитата(zltigo @ Sep 30 2006, 14:04) Цитат...   Sep 30 2006, 12:20
|- - zltigo   Цитата(CD_Eater @ Sep 30 2006, 15:20) А е...   Sep 30 2006, 12:52
- - goodwin   Совсем недавно была дискуссия на телесистемах по п...   Sep 30 2006, 12:41
- - J_B   Особо переделкой без goto не занимался, но кто что...   Sep 30 2006, 14:27
|- - zltigo   Цитата(J_B @ Sep 30 2006, 17:27) Смысл та...   Sep 30 2006, 14:56
|- - xemul   Цитата(J_B @ Sep 30 2006, 18:27) Особо пе...   Sep 30 2006, 15:45
- - zltigo   Код seg[0] = tmp/100; seg[2] = tm...   Sep 30 2006, 15:55
|- - xemul   Цитата(zltigo @ Sep 30 2006, 19:55) Код s...   Sep 30 2006, 16:02
- - prottoss   Выскажусь тоже про goto... так как несколько раз п...   Sep 30 2006, 16:08
- - _artem_   Я использую goto, но это не тот случай. Не проверя...   Sep 30 2006, 17:08
- - WHALE   2 artem_ Вы про цикл с постусловием do while слыша...   Sep 30 2006, 18:40
- - _artem_   WHALE, во первых я не из пешеры), во вторых это не...   Sep 30 2006, 19:55
- - WHALE   for(I=0;I<=2;I++) { do{ TMP_P=TMP; ...   Sep 30 2006, 21:25
- - _artem_   Да никаких извинений не нужно, не обиделся.) Я сам...   Sep 30 2006, 22:17
- - Rst7   Господа, о чем речь? Посмотрите в исходники библио...   Oct 1 2006, 06:54
- - bve   Мне кажется, что "ноги растут" от старин...   Oct 1 2006, 15:19
- - _artem_   Вы правы - http://en.wikipedia.org/wiki/GOTO Но ч...   Oct 1 2006, 15:39
- - _Bill   Цитата(J_B @ Sep 29 2006, 18:13) Почему с...   Oct 2 2006, 07:48
- - AVNN   Что касается AVR и goto, то при использовании опт...   Oct 2 2006, 08:22
|- - _Bill   Цитата(AVNN @ Oct 2 2006, 11:22) Что каса...   Oct 2 2006, 08:35
- - defunct   Всякий овощ полезен будучи приготовленным надлежащ...   Oct 2 2006, 10:12
- - ValBag   Во всех наставлениях по СИ для МК "...настоят...   Oct 24 2007, 06:19
|- - alexander55   Цитата(ValBag @ Oct 24 2007, 10:19) goto...   Oct 24 2007, 07:01
|- - dxp   Цитата(ValBag @ Oct 24 2007, 13:19) Во вс...   Oct 24 2007, 07:19
||- - ReAl   Цитата(dxp @ Oct 24 2007, 09:19) Существу...   Oct 24 2007, 11:55
||- - SasaVitebsk   Цитата(ReAl @ Oct 24 2007, 14:55) Ещё в 9...   Oct 28 2007, 11:32
|- - andron86   Цитата(ValBag @ Oct 24 2007, 08:19) Для п...   Oct 24 2007, 07:23
||- - alexander55   Цитата(andron86 @ Oct 24 2007, 11:23) Раб...   Oct 24 2007, 07:58
||- - zltigo   Цитата(alexander55 @ Oct 24 2007, 10:58) ...   Oct 24 2007, 08:07
|||- - alexander55   Цитата(zltigo @ Oct 24 2007, 12:07) Вот т...   Oct 24 2007, 08:13
||- - andron86   Цитата(alexander55 @ Oct 24 2007, 09:58) ...   Oct 24 2007, 08:38
|- - defunct   Цитата(ValBag @ Oct 24 2007, 09:19) Для п...   Oct 24 2007, 12:42
- - bodja74   В ассемблере вообще ни в чем ограничений нет Пр...   Oct 24 2007, 06:40
- - DASM   Чисто в лоб типа такого Кодwhile (1) { ...   Oct 24 2007, 06:45
- - IEC   Ну результат почти такой же. В текущем примере из-...   Oct 24 2007, 07:07
|- - ReAl   Цитата(IEC @ Oct 24 2007, 09:07) А вообще...   Oct 24 2007, 11:46
- - zltigo   Продолжаем в уже существующей ветке: http://electr...   Oct 24 2007, 07:19
- - ValBag   Прошу прощения за создание новой темы без поиска. ...   Oct 24 2007, 09:49
- - Maddy   А собственно чего все так на бедного goto оплчилис...   Oct 24 2007, 10:02
- - aesok   GCC Bugzilla: Only very good and very bad progra...   Oct 24 2007, 10:04
|- - alexander55   Цитата(aesok @ Oct 24 2007, 14:04) Only v...   Oct 24 2007, 10:21
- - DASM   Не отношу себя ни к вери гуд ни вери бэд, но со вр...   Oct 24 2007, 10:19
- - DASM   OFF - ReAL - а как код в трубочку свернули ?   Oct 24 2007, 11:49
- - ValBag   Перечитал всю тему. На мой взгляд отказ от примене...   Oct 24 2007, 12:06
|- - ReAl   Цитата(ValBag @ Oct 24 2007, 14:06) Отред...   Oct 24 2007, 12:27
|- - ReAl   Цитата(ValBag @ Oct 24 2007, 14:06) Тот ж...   Oct 24 2007, 12:29
- - DASM   А что по вашему ReAl сделал ?   Oct 24 2007, 12:09
|- - ValBag   Цитата(DASM @ Oct 24 2007, 20:09) А что п...   Oct 24 2007, 12:29
- - ReAl   Раз уж я тут застрял - что я имел ввиду под ...   Oct 24 2007, 12:50
- - ValBag   ReAl ЦитатаА тут мы переводим текст с чего-то типа...   Oct 24 2007, 13:09
|- - defunct   Цитата(ValBag @ Oct 24 2007, 16:09) А чем...   Oct 24 2007, 13:16
|- - ReAl   Цитата(ValBag @ Oct 24 2007, 15:09) ReAl ...   Oct 24 2007, 13:46
|- - ValBag   Цитата(ReAl @ Oct 24 2007, 21:46) пример ...   Oct 24 2007, 14:01
- - ValBag   defunct Понятно, появляется рябь в глазах, а затем...   Oct 24 2007, 13:33
|- - alexander55   Цитата(ValBag @ Oct 24 2007, 17:33) defun...   Oct 24 2007, 13:44
- - ValBag   ReAl Теперь все понятно! Только наверное надо ...   Oct 27 2007, 08:58
|- - ReAl   Цитата(ValBag @ Oct 27 2007, 10:58) Тольк...   Oct 27 2007, 10:16
- - sensor_ua   ЦитатаТут эти скобки не обязательны - согласно при...   Oct 27 2007, 10:51


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016