Составной оператор (или блок) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Составной оператор (или блок)



С тем чтобы допустить возможность использования несколь-ких операторов там, где ожидается присутствие только одного,предусматривается составной оператор (который также и экви-валентно называют "блоком"): составной оператор: \(список-описаний список-операторов необ необ\) список-описаний: описание описание список-описаний список-операторов: оператор оператор список-операторов Если какой-либо идентификатор из списка-описаний был описанранее, то во время выполнения блока внешнее описание подав-ляется и снова вступает в силу после выхода из блока. Любая инициализация автоматических и регистрационных пе-ременных проводится при каждом входе в блок через его нача-ло. В настоящее время разрешается (но это плохая практика)передавать управление внутрь блока; в таком случае эти ини-циализации не выполняются. Инициализации статических пере-менных проводятся только один раз, когда начинается выполне-ние программы. Находящиеся внутри блока внешние описания нерезервируют памяти, так что их инициализация неразрешается.

Условные операторы

Имеются две формы условных операторов: IF (выражение) оператор IF (выражение) оператор ELSE оператор В обоих случаях вычасляется выражение и, если оно отлично отнуля, то выполняется первый подоператор. Во втором случае,если выражение равно нулю, выпалняется второй подоператор.Как обычно, двусмысленность "ELSE" разрешается связываениемELSE с последним встречающимся IF, у которого нет ELSE.

Оператор WHILE

Оператор WHILE имеет форму WHILE (выражение) оператор Подоператор выполняется повторно до тех пор, пока значениевыражения остается отличным от нуля. проверка производитсяперед каждым выполнением оператора.

Оператор DO

Оператор DO имеет форму DO оператор WHILE (выражения) Оператор выполняется повторно до тех пор, пока значениевыражения не станет равным нулю. Проверка производится послекаждого выполнения оператора.

Оператор FOR

Оператор FOR имеет форму (выражение-1; выражение-2; выражение-3)оператор необ необ необ Оператор FOR эквивалентен следующему выражение-1; WHILE (выражение-2) \(оператор выражение-3 \) Таким образом, первое выражение определяет инициализациюцикла; второе специфиуирует проверку, выполняемую перед каж-дой итерацией, так что выход из цикла происходит тогда, ког-да значение выражения становится нулем; третье выражениечасто задает приращение параметра, которое проводится послекаждой итерации. Любое выражение или даже все они могут быть опущены. Ес-ли отсутствует второе выражение, то предложение с WHILE счи-тается эквивалентным WHILE(1); другие отсутствующие выраже-ния просто опускаются из приведенного выше расширения.

Оператор SWITCH

Оператор SWITCH (переключатель), вызывает передачу уп-равления к одному из нескольких операторов, в зависимости отзначения выражения. Оператор имеет форму SWITCH (выражение) оператор В выражении проводятся обычные арифметические преобразова-ния, но результат должен иметь тип INT. Оператор обычно яв-ляется составным. Любой оператор внутри этого оператора мо-жет быть помечен одним или более вариантным префиксом CASE,имеющим форму: CASE констанстное выражение: где константное выражение должно иметь тип INT. Никакие двевариантные константы в одном и том же переключателе не могутиметь одинаковое значение. точное определение константноговыражения приводится в п. 23. Кроме того, может присутствовать самое большее один опе-раторный префикс вида DEFAULT: При выполнении оператора SWITCH вычисляется входящее внего выражение и сравнивается с каждой вариантной констан-той. Если одна из вариантных констант оказывается равнойзначению этого выражения, то управление передается операто-ру, который следует за совпадающим вариантным префиксом. Ес-ли ни одна из вариантных констант не совпадает со значениемвыражения и если при этом присутствует префикс DEFAULT, тоуправление передается оператору, помеченному этим префиксом.если ни один из вариантов не подходит и префикс DEFAULT от-сутствует, то ни один из операторов в переключателе не вы-полняется. Сами по себе префиксы CASE и DEFAULT не изменяют потокуправления, которое беспрепятсвенно проходит через такиепрефиксы. Для выхода из переключателя смотрите операторBREAK, п. 17.8. Обычно оператор, который входит в переключатель, являет-ся составным. Описания могут появляться в начале этого опе-ратора, но инициализации автоматических и регистровых пере-менных будут неэффективными.

Оператор BREAK

Оператор BREAK; вызывает завершение выполнения наименьшего охватывающегоэтот оператор оператора WHILE, DO, FOR или SWITCH; управле-ние передается оператору, следующему за завершенным операто-ром.

Оператор CONTINUE

Оператор CONTINUE; приводит к передаче управления на продолжающую цикл частьнаименьшего охватывающего этот оператор оператора WHILE, DOили FOR; то есть на конец цикла. Более точно, в каждом изоператоров WHILE(...) \(DO \(FOR(...) \(......... CONTIN:; CONTIN:; CONTIN:; \) \) WHILE(...); \) Оператор CONTINUE эквивалентен оператору GOTO CONTIN. (ЗаCONTIN: следует пустой оператор; см. П. 17.13.).

Оператор возврата

Возвращение из функции в вызывающую программу осуществ-ляется с помощью оператора RETURN, который имеет одну изследующих форм RETURN; RETURN выражение; В первом случае возвращаемое значение неопределено. Во вто-ром случае в вызывающую функцию возвращается значение выра-жения. Если требуется, выражение преобразуется к типу функ-ции, в которой оно появляется, как в случае присваивания.Попадание на конец функции эквивалентно возврату без возвра-щаемого значения.

Оператор GOTO

Управление можно передавать безусловно с помощью опера-тора GOTO идентификатор1 идентификатор должен быть меткой (п. 9.12), Локализованной вданной функции.

Помеченный оператор

Перед любым оператором может стоять помеченный префиксвида идентификатор: который служит для описания идентификатора в качестве метки.Метки используются только для указания места, куда передает-ся управление оператором GOTO. Областью действия метки явля-ется данная функция, за исключением любых подблоков, в кото-рых тот же идентификатор описан снова. Смотри п. 19.

Пустой оператор

Пустой оператор имеет форму:; Пустой оператор оказывается полезным, так как он позволяетпоставить метку перед закрывающей скобкой \) составного опе-ратора или указать пустое тело в операторах цикла, таких какWHILE.

18. Внешние определения

C-программа представляет собой последовательность внеш-них определений. Внешнее определение описывает идентификаторкак имеющий класс памяти EXTERN (по умолчанию), или возможноSTATIC, и специфицированный тип. Спецификатор типа (п. 16.2)Также может быть пустым; в этом случае считается, что типявляется типом INT. Область действия внешних определенийраспространяется до конца файла, в котором они приведены,точно так же, как влияние описаний простирается до концаблока. Синтаксис внешних определений не отличается от син-таксиса описаний, за исключением того, что только на этомуровне можно приводить текст функций.

Внешнее определение функции

Определение функции имеет форму определение-функции: спецификаторы-описания описатель-функциитело-функции необ Единственными спецификаторами класса памяти, допускаемыми вкачестве спецификаторов-описания, являются EXTERN илиSTATIC; о различии между ними смотри п. 19.2. Описатель фун-кции подобен описателю для "функции, возвращающей...", заисключением того, что он перечисляет формальные параметрыопределяемой функции. Оисатель-функции: описатель (список-параметров необ) список параметров: идентификатор идентификатор, список-параметров тело-функции имеет форму тело-функции: список-описаний составной-оператор Идентификаторы из списка параметров и только они могутбыть описаны в списке описаний. Любой идентификатор, тип ко-торого не указан, считается имеющим тип INT. Единственнымдопустимым здесь спецификатором класса памяти являетсяREGISTER; если такой класс памяти специфицирован, то в нача-ле выполнения функции соответствующий фактический параметркопируется, если это возможно, в регистр. Вот простой пример полного определения функции: INT MAX(A, B, C) INT A, B, C; \(INT M; M = (A>B)? A:B; RETURN((M>C)? M:C); \) Здесь INT - спецификатор-типа, MAX(A,B,C) - описатель-функ-ции, INT A,B,C; - список-описаний формальных параметров, \(... \) - Блок, содержащий текст оператора. В языке "C" все фактические параметры типа FLOAT преоб-разуются к типу DOUBLE, так что описания формальных парамет-ров, объявленных как FLOAT, приспособлены прочесть параметрытипа DOUBLE. Аналогично, поскольку ссылка на массив в любомконтексте (в частности в фактическом параметре) рассматрива-ется как указатель на первый элемент массива, описания фор-мальных параметров вила "массив..." приспособлены прочесть: "указатель на...". И наконец, поскольку структуры,объединения и функции не могут быть переданы функции, бесс-мысленно описывать формальный параметр как структуру,объединение или функцию (указатели на такие объекты, конеч-но, допускаются).

18.2. Внешние определения данных



Поделиться:


Последнее изменение этой страницы: 2016-08-26; просмотров: 180; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.233.58 (0.007 с.)