Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






О п е р а т о р п е р е Х о д а






 

Синтаксическая диаграмма:

 

 
 


 

Оператор перехода указывает, что дальнейшая работа должна продолжаться в другой части программы, а именно с того места, где находится метка. Метка - это любой идентификатор, после которого поставлено двоеточие. Метку можно поставить перед любым оператором в той функции, где находится соответствующий ей оператор 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.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.