На низком уровне (на уровне кода, выполняемого процессором) , вообще не существует никакого иного способа перехода в другую точку программы, кроме как "goto".
Только называется оно на ассемблере по-другому. (jmp - безусловный переход, jz - переход, если результат равен нулю, jnz - переход, если результат не равен нулю, jc - переход, если результат меньше нуля, итд) . Но смысл именно такой: перейти в другое место, если условие выполняется. (предполагается, что если оно не выполняется, то выполнять следующую команду, и никуда не переходить) .
Так что в ядре и в драйверах только на goto всё и построено.
В языках высокого уровня сделана масса gotoзаменителей, (которые при переводе программы в машинный код все равно превращаются в те же goto, только высокоуровневый программер этого не видит)) . Это сделано для удобства чтения и упрощения понятности алгоритма.
Часто, однако, в ущерб эффективности алгоритма.
Часто одно goto вместо высокоуровневых заменителей способно ускорить работу алгоритма в разы.
Другие языки программирования и технологии
Правда ли что ни одна действительно серьезная программа не обходится без безусловных переходов GOTO?
Неправда.
В моем основном проекте на работе который более 280000 строк, и - ты не поверишь! - ни одного безусловного перехода!
А вот компилированный код - да, без JMP не обходится, даже у простых программ.
В моем основном проекте на работе который более 280000 строк, и - ты не поверишь! - ни одного безусловного перехода!
А вот компилированный код - да, без JMP не обходится, даже у простых программ.
goto в любых программах стараются не использовать. Этот оператор мешает человеку понимать программы, компилятору - оптимизировать их, а для скорости исполнения кода - почти катастрофа. В связи с архитектурой современных процессоров, которые стараются предугадать, что придется делать, этот оператор означает - выкинь все, что заготовил и начинай сначала. Хотя в последних моделях процессоров стоит специальный блок для предугадывания повторяющихся переходов, но это лишь костыли коду-инвалиду. В принципе на самом низком уровне без явно указанных переходов не обойтись, но чем более на низком уровне они делаются, тем меньше потери и больше возможностей для внутренней оптимизации кода - не думай, что процессор исполняет все глупости, которые ему приказали совершить, даже если они написаны на ассемблере.
За такое вообще кастрируют через повешение.
Неправда
Есть много других способов убить читабельность исходников :))
Есть много других способов убить читабельность исходников :))
ГоуТу среди программистов считается просто дурным тоном. ЕГо использование это прям как корырятся в носу на официальном обеде. Так что, думаю да =D
goto не советуют использовать . ведь можно и без него писать
нужно различать низкоуровневое программирование, типа ассемблера, и программирование на современных языках, типа С++, С# , Java. В первом случае действительно без переходов не обойтись, но там и выбора операций немного: инкремент, декремент, проверка условия, переход, ну может еще парочка. А во втором в языках специально заложена куча способов реализации алгоритмов. И вот в них уже путать логику всякими внезапными переходами очень нехорошо
Напиши программу с использованием кучи ГОУТУ и попробуй потом её отладить. Когда запутаешься и затрахаешься, сам ответишь на свой вопрос :)
Похожие вопросы
- В Turbo Pascal есть оператор перехода Goto, а в C++ чего вместо него имеется (+синтаксис)???
- Зачем дети просят ссылку чтобы скачать такую серьёзную программу как photoshop?
- Как можно написать программу на языке C, которая будет выводить числа от 1 до 1000 без if, switch, do, while, for, goto?
- Люди которые против goto утверждают что оно мешает чтению, и как пример приводят СОТНЮ goto в функции. И что-же....
- паскаль, как работать с оператором goto, как ставить метки, чтобы при операции goto 1,
- Те кто против goto просто не имели дело с серьёзными сложными алгоритмами?
- можно ли большое колчичество меток goto в программе определить как нечистоплотность программиста? или это нормально*?
- даны 3 разл целых числа a,b,c используя оператор GOTO составить программу для ввода чисел в порядке убывания
- Подскажите кто помнит QB (Бэйсик)Что значат операторы: DIM, FOR...NEXT, STEP, GOTO...
- Почему goto нехороший стиль программирования ?