Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
О п е р а т о р п е р е Х о д а
Синтаксическая диаграмма:
Оператор перехода указывает, что дальнейшая работа должна продолжаться в другой части программы, а именно с того места, где находится метка. Метка - это любой идентификатор, после которого поставлено двоеточие. Метку можно поставить перед любым оператором в той функции, где находится соответствующий ей оператор goto. Ее не надо объявлять. Пример. Алгоритм Евклида.
int main() { // программа Evklid1 unsigned int m, n, d, q, r; //Ввод значения m, n m10: if (n> 0) { q = m / n; r = m % n; m = n; n = r; goto m10; } d = m; //Печать d getch(); return 0; }
Примечание. Оператор q = m / n является избыточным, поскольку вычисленное значение q в программе Evklid1 не используется.
Рассмотрим вкратце, что собой представляет метка в программе. При трансляции Си-программы каждый ее оператор преобразуется в одну или несколько машинных инструкций. Эти инструкции размещаются в последовательных полях памяти. Каждая инструкция имеет конкретный адрес, определяемый адресом крайнего левого байта поля памяти, которое занимает инструкция. Команды, как правило, выполняются последовательно, в порядке их записи в памяти. Однако если встречается инструкция перехода, которой соответствует оператор goto в Си-программе, то дальше будет выполняться не следующая по порядку машинная инструкция, а та, адрес которой указан в инструкции перехода. Этот адрес перехода и соответствует метке в Си-программе.
Оператор goto рекомендуется применять лишь в исключительных случаях, когда сложный фрагмент программы трудно реализовать без этого оператора или когда оператор перехода заметно повышает эффективность программы. В общем случае наличие в программе операторов goto ухудшает понимание программы. Особенно недопустимым считается передача управления снизу вверх, как это сделано в программе Evklid1. Ниже перечисляются случаи, когда целесообразно применять оператор goto: - выход из блока в вызывающую программу (переход с помощью оператора goto на конец блока); - переход на конец тела цикла; - принудительный выход из цикла; - переход к удаленному фрагменту программы. Однако для того, чтобы явно не применять оператор goto, в Си для первых трех случаев предусмотрены специальные операторы, а именно, continue и break, а также функция exit. В частности, алгоритм Евклида легко реализовать без операторов goto с помощью операторов цикла while или do while.
|