Операторы переходов – язык программирования Си

April 8, 2014 by admin Комментировать »

Данная категория операторов применяется относительно редко. К их числу относятся: «break», «continue», «goto» и «return». Считается, что слишком частое использование операторов переходов ухудшает читаемость программы и затрудняет её модификацию. Но, все же, бывают моменты, когда без операторов, организующих переходы, — «как без воды».

Оператор «break» (в переводе с англ. «прерывать»).

Этот старый знакомый уже встречался при изучении оператора «switch» на Рис. 6.22, б, в. Именно он организовывал досрочный выход из процедуры множественного сравнения «кейсов».

Оператор «break» в одиночку бесполезен. Его надо вводить внутрь тела одного из четырёх операторов: «switch», «while», «do-while», «for». При помощи оператора «break» досрочно прерывается выполнение основного цикла и пропускаются оставшиеся команды, после чего управление передаётся вниз к самому первому оператору после закрывающей фигурной скобки.

Если оператор «break» находится внутри нескольких вложенных друг в друга циклов, то его действие распространяется только на внутренний цикл, т.е. на тот, в котором он содержится. Именно из-за этого нюанса у программистов возникают трудности и ошибки при отлаживании больших по объёму листингов.

Интересное наблюдение. Оператор «break» является абсолютно прозрачным по отношению к операторам выбора «if» и «if-else». Он беспрепятственно «проходит» сквозь их фигурные скобки, что надо учитывать на практике.

Оператор «continue» (в переводе с англ. «продолжать»).

Сфера применения оператора «continue» меньше, чем у оператора «break». Он работаетлишь с тремя циклами: «while», «do-while», «for» и является прозрачным для операторов «if», «if-else». Главное различие между «continue» и «break» заключается в том, что вместо досрочного завершения цикла осуществляется досрочное завершение текущей итерации с пропуском оставшихся команд. Это более мягкое условие, не приводящее сразу к окончанию цикла (Рис. 6.26, а, б).

Рис. 6.26. Сравнение циклов «for»: а) с оператором «continue»; б) с оператором «break». Оператор «goto» (в переводе с англ. «перейти к»).

Оператор «goto» состоит из двух частей — ключевого слова «goto» и метки. Имена меток образуются по тем же правилам, что и имена переменных. Например, при выполнении оператора «goto metka;» управление передаётся на тот оператор, в начале которого слева указано ключевое слово «metka:». Оно может находиться влюбом, самом неожиданном месте программы. При этом не обращается внимание ни на вложенные циклы, ни на условия проверки, ни на незавершённые вычисления. Переход производится напрямую в любую строку программы, причём без задержек во времени и без окончания текущих операций.

Вот тут-то и кроется «терра инкогнита» для начинающих программистов, поскольку надо иметь большой опыт, чтобы учесть все последствия, возникающие после выхода из прерванной процедуры при неизвестно чем заполненном стеке и загадочном состоянии регистров специальных функций.

Чтобы избежать путаницы, разработаны стандартные приёмы, которые позволяют заменить все без исключения конструкции «goto» связками обычных Сператоров. Конкретные примеры приведены в [6-6]. Родоначальники языка Си, Б.Керниган и Д.Ритчи, тоже призывают применять оператор «goto» как можно реже или не применять его совсем [6-7].

Существует лишь один частный случай, когда оператор «goto» полезен — это быстрый выход из многократно вложенных циклов при обнаружении каких-либо аварийных или внештатных ситуаций. Оператор «break» здесь пасует, поскольку даёт возможность выхода только из самого внутреннего цикла, а вот оператор «goto» — из любого, в том числе из бесконечного.

На Рис. 6.27, а, б показаны каркасы программ, моделирующие безусловные переходы вверх и вниз. В каком бы глубоком цикле не находился оператор «goto», управление будет сразуже передано на метку «sl:» (имя выбирается произвольно). Если метка указывает на первый оператор программы, то произойдёт «мягкий» сброс MK. В этом случае разработчику надо предусмотреть начальную инициализацию всех без исключения используемых в программе регистров специальных функций и чёткую установку всех задействованных по схеме линий портов.

Рис. 6.27. Форма записи оператора «goto»: а) с переходом вверх; б) с переходом вниз.

В языке Basic тоже существует оператор «GO ТО», причём применяется он настолько часто, что листинги программ аж пестрят прямыми переходами. В языке Си, наоборот, от «goto» стараются избавляться разными способами. Очевидно, что любителям Basic придётся адаптироваться к такому стилю программирования.

Оператор «return» (в переводе с англ. «возвращаться»).

Этот оператор несколько обособлен от своих сородичей, поскольку применяется без ограничений. Его роль — организация корректного выхода из функций. Именно о них и пойдёт речь дальше.

Источник: Рюмик, С. М., 1000 и одна микроконтроллерная схема. Вып. 2 / С. М. Рюмик. — М.:ЛР Додэка-ХХ1, 2011. — 400 с.: ил. + CD. — (Серия «Программируемые системы»).

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты