Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: putman on December 21, 2016, 08:25:39 AM
-
Здравствуйте.
Меня смутил выход из подпрограммы через GOTO.
Я захожу в неё, и по некоторому условию выхожу не через END_SUB.
Почему не происходит сбоя при повторном вызове этой, или другой подпрограммы ?
Разве адрес вызова первой стирается после любого выхода из тела даже по GOTO ?
-
Тебя смущает, а ты всё равно выходишь. Мыши кололись...
И никто не разрешал так выходить, но и защиты "от дурака" не встроено.
Сбои происходят при определённых условиях. Могу пример показать. Но зачем? Сказано же нельзя и умом тоже понимаешь...
Адрес вызова не стирается, для скрипта ты по прежнему в подпрограмме. И в стеке лежит адрес возврата.
Если войдёшь снова по вызову - то ты в новой подпрограмме. Рекурсия однако. Только неправильная, без нормального конца.
Если входишь по вызову в другую ПП - штатная вложенность вызовов. Опять же без возврата.
Т.е. и подпрограммы как таковой нет, как будто всё на педалях GOTO. +утечка и возможные проблемы.
При благоприятных условиях только маленькая утечка памяти в виде адресов возврата в стеке.
При неблагоприятных - поведение работы не ожидаемое вплоть до ухода вразнос.
-
Примерно так и я думаю ... значит проблемы нет кроме растущего стека.
-
Я же говорю иногда есть.
Если в скрипт не большой и логика не сильно мудрёная и только выпрыгивать, но не "впрыгивать", то ничего не будет кроме утечки.
Вот если ещё "впрыгивать" то пиши пропало.
И зачем так делать? Возвращайся нормально.
-
Ок =).