|
|
  |
Оператор GoTo, безусловный переход или правила хорошего тона |
|
|
|
Sep 30 2006, 21:25
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
for(I=0;I<=2;I++) { do{ TMP_P=TMP; TMP=TMP-X; if(TMP>=0) ++VAL; } while(TMP>=0) SEG[i]=VAL; VAL=0; TMP=TMP_P; X=X/10; } _artem_Извиняюсь,погорячился,тоже кривовато получается,но все-таки можно и без GOTO  Еще раз извиняюсь,прочел предыдущую страницу,это все вообще не из той оперы.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Oct 1 2006, 15:39
|

учащийся
    
Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249

|
Вы правы - http://en.wikipedia.org/wiki/GOTOНо что интересно: "there are some tasks that cannot be straightforwardly accomplished in many programming languages without the use of GOTO statements, such as breaking out of nested loops and exception handling." и имхо это действительно так.
--------------------
Зачем лаять на караван , когда на него можно плюнуть?
|
|
|
|
|
Oct 2 2006, 07:48
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(J_B @ Sep 29 2006, 18:13)  Почему считается, что "нехорошо" использовать данного оператора? Дурным тоном в программировании является не само использование оператора goto, а его частое и неоправданное использование. В таких случаях программа получается запутанной и трудной для понимания, а, стало быть, для отладки или соправождения. Современные языки программирования (Си в том числе) имеют управляющие конструкции, позволяющие в принципе обходится без goto. Однако в ряде случаев использование goto позволяет сделать программу более понятной. Речь идет о тех случаях, когда необходимо сделать выход из вложенных циклов. В таких случаях оператор goto позволяет исключить введение множества флагов, используемых для проверки условия принудительного выхода из циклов. При этом программа получается не только более наглядной, но и более эффективной. Основное правило использования goto - переход только вперед. Если goto используется для перехода назад, то это означает, что необходимо воспользоваться каким-либо оператором цикла и/или оператором принудительного перехода к очередной итерации цикла - continue. А вообще, непонятную и нечитаемую программу можно легко написать и не используя оператор goto. Это часто происходит потому, что человек еще не совсем представляет что именно ему нужно. Поэтому, прежде чем писать код, лучше сначала продумать структуру программы. Методы структурного программирования известны не один десяток лет. В современных языках программирования имеются все необходимые конструкции для создания структурированных программ: последовательно исполняемые операторы (простые и составные), операторы ветвления (if, if...else, switch (case), goto), цикла (while, do...while, for). Мои размышления о "косметики" программ можно найти здесь.
|
|
|
|
|
Oct 2 2006, 08:22
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 28-09-06
Из: Минск
Пользователь №: 20 776

|
Что касается AVR и goto, то при использовании оптимизации кода по размеру, этот оператор опасно использовать. При использавании Cross Call могут действительно возникнуть проблемы со стеком. Так что лучше не рисковать! Можно просто поэкпериментировать, компилируя программу с разными настройками оптимизации - хороший код должен работать в любом случае.
|
|
|
|
|
Oct 2 2006, 08:35
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(AVNN @ Oct 2 2006, 11:22)  Что касается AVR и goto, то при использовании оптимизации кода по размеру, этот оператор опасно использовать. При использавании Cross Call могут действительно возникнуть проблемы со стеком. Так что лучше не рисковать! Можно просто поэкпериментировать, компилируя программу с разными настройками оптимизации - хороший код должен работать в любом случае. А какие тут могут бть проблемы?
|
|
|
|
|
Oct 24 2007, 06:19
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 15-03-07
Пользователь №: 26 183

|
Во всех наставлениях по СИ для МК "...настоятельно не рекомендуется использовать оператор безусловного перехода goto, т.к. он затрудняет понимание программ и возможность их модификаций...". В то же время другими операторами СИ не всегда удобно осуществлять переходы, а в ассемблере применение команд jmp и rjmp ограничений почти нет. Для примера в программе "кодовый замок" из книги Белова А.В., в небольшом тексте программы на CИ в модуле main 7 переходов. И все работает нормально. Может быть, кто то потвердит вводное утверждение и покажет как надо на приложенном тексте.
Прикрепленные файлы
Zamok.txt ( 4.23 килобайт )
Кол-во скачиваний: 84
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|