2012-10-10 3 views

ответ

14

GOTO просто переходит на другую линию, GOSUB отслеживает, откуда она (на стеке, предположительно), поэтому, когда интерпретатор встречает RETURN, она восходит к последнему месту GOSUB назывались.

Что мне больше всего интересно, почему вы используете BASIC для чего-нибудь?

+0

Базовый по-прежнему используется. VB.NET по-прежнему ОСНОВА. –

+1

Что? VB.NET - это совершенно другой язык. Конечно, это называется Basic, но это не 'BASIC' – Collin

+0

@Colin - вам не хватает смысла. VB.NET по-прежнему ОСНОВА. Да, у него много расширений OO, но он по-прежнему по сути является BASIC. Конечно, это не интерпретируется, но это стратегия исполнения, не связанная с языком. –

1

Когда вы вызываете GOTO, программа перейдет к соответствующей строке и продолжит выполнение.

Если вы используете GOSUB, он будет делать то же самое, однако в какой-то момент вы можете закодировать инструкцию RETURN, и код вернется к строке сразу после GOSUB.

Итак, GOTO отправляется в X, а GOSUB - в X, но помню, где вы сейчас, и поэтому вы можете вернуться позже.

+0

Спасибо; однако я думаю, что мы можем включить другую передачу команд, где предполагаемая исполняемая инструкция вернулась к следующей строке, следующей за оператором GOTO, а затем другую передачу управляющего оператора над линией первого переноса управления, чтобы сделать то же самое, хотя больше чем обычный GOSUB, а затем один RETURN. например, 10 GOTO 30. 15 кодов. 20 кодов. 25 GOTO 45. 30 Кодов. 35 Кодов. 40 GOTO 15. 45 END это будет работать, и он никогда не войдет в бесконечный цикл. –

+0

Я не могу прочитать ваш комментарий. Пожалуйста, отредактируйте свой вопрос. –

+0

Ваш ответ верный! Я просто пытаюсь применить другой метод, который будет содержать больше кодов. Спасибо, что ответили на этот вопрос. Я уже голосовал за ваш ответ –

2

Другие предоставленные ответы дают хорошее объяснение того, как использовать GOTO и GOSUB, но есть важная разница в том, как они обрабатываются. Когда выполняется GOTO, он начинается в верхней части стека и перелистывает все строки кода, пока не найдет линию, которую он должен использовать GOTO. Затем, если вы используете другой оператор GOTO для возврата, он снова попадает в верхнюю часть стека и просматривает все, пока не доберется до следующего места.

GOSUB делает почти то же самое, что и GOTO, но он помнит, где он был. Когда вы используете оператор RETURN, он просто отскакивает назад, прежде чем сначала переходить в верхнюю часть стека и перебрасывать все снова, поэтому он намного быстрее. Если вы хотите, чтобы ваш код работал быстро, вы должны поместить ваши наиболее называемые подпрограммы в верхнюю часть стека и использовать GOSUB/RETURN вместо GOTO.