9. Операторы
Операторы выполняются последовательно во всех случаях
кроме особо оговоренных.
9.1 Оператор Выражение
Большинство операторов является операторами выражение,
которые имеют вид
выражение ;
Обычно операторы выражение являются присваиваниями и вы-
зовами функций.
9.2 Составной Оператор, или Блок
Составной оператор (называемый также "блок", что эквива-
лентно) дает возможность использовать несколько операторов в
том месте, где предполагается использование одного:
составной_оператор:
(* список_операторов opt *)
список_операторов:
оператор
оператор список_операторов
Обратите внимание, что описание - это вариант оператора
(#9.14).
9.3 Условный Оператор
Есть два вида условных операторов
if ( выражение ) оператор
if ( выражение ) оператор else оператор
и если оно не ноль, то выполняется пер-
вый подоператор. Если используется "else", то второй
подоператор выполняется, если выражение есть 0. Как обычно,
неоднозначность "else" разрешается посредством того, что else
связывается с последним встречнным if, не имеющим else.
9.4 Оператор while
Оператор while имеет вид
while ( выражение ) оператор
9.5 Оператор do
Оператор do имеет вид
do оператор while ( выражение ) ;
(#9.3).
9.6 Оператор for
Оператор for имеет вид
for (оператор_1 выражение_1 opt; выражение_2 opt) оператор_2
Этот оператор эквивалентен следующему:
оператор_1
while ( выражение_1 ) (*
оператор_2
выражение_2 ;
*)
выполняемую перед каждой итерацией проверку,
по которой производится выход из цикла, если выражение стано-
вится нулем; второе выражение часто задает приращение, выпол-
няемое после каждой итерации.
Каждое или оба выражения могут быть опущены. Отсутствие
выражения_1 делает подразумеваемое while-предложение эквива-
лентым while(1). Заметьте, что если оператор_2 является опи-
санием, то область видимости описанного имени распространяеи-
ся до конца блока, охватывающего оператор for.
9.7 Оператор switch
Оператор switch вызывает передачу управления на один из
нескольких операторов в зависимости от значения выражения. Он
имеет вид
switch ( выражение ) оператор
Выражение должно быть арифметичского или указательного
типа. Любой оператор внутри оператора может быть помечен од-
ной или более меток case следующим образом:
case константное_выражение :
где константное выражение должно иметь тот же тип что и
выражение-переключатель; производятся обычные арифметические
преобразования. В одном операторе switch никакие две констан-
ты, помеченные case, не могут иметь одинаковое значение.
Константные выражения определяются в #12.
Также может быть не более чем одна метка вида
default :
Когда выполнен оператор switch, проведено вычисление его
выражения и сравнение его с каждой case константой. Если одна
из констант равна значению выражения, то управление передает-
ся на выражение, следующее за подошедшей меткой case. Если
никакая case константа не соответствует выражению, и есть
метка default, то управление передается на выражение, которо-
му она предшествует. Если нет соответсвующих вариантов case и
default отсутствует, то никакой из операторов в операторе
switch не выполняется.
Метки case и default сами по себе не изменяют поток уп-
равления, который после задерки идет дальше, перескакивая че-
рез эти метки. Для выхода из switch см. break, #9.8.
Обычно зависящий от switch оператор является составным.
В голове этого оператора могут стоять описания, но инициали-
зации автоматических и регистровых переменных являются безре-
зультатными.
9.8 Оператор break
Оператор
break ;
вызывает завершение выполнения наименьшего охватывающего
оператора while, do, for или switch; управление передается на
оператор, следующий за завершенным.
9.9 Оператор continue
Оператор
continue ;
while (...) (* do (* for (...) (*
... ... ...
contin: ; contin: ; contin: ;
*) *) while (...); *)
continue эквивалентно goto contin. (За contin: идет пус-
той оператор, #9.13.)
9.10 Оператор return
Возврат из функции в вызывающеую программу осуществляет-
ся с помощью оператора return, имеющего один из двух видов:
return ;
return выражение ;
Первый может использоваться только в функциях, не
возвращающих значения, т.е. в функциях с типом возвращаемого
значения void. Вторая форма может использоваться только в
функциях, возвращающих значение; значение выражения возвраща-
ется тому, кто вызывал функцию. Если необходимо, то выражение
преобразуется, как это делается при инициализации, к типу
функции, в которой оно появилось. Обход конца функции эквива-
лентен возврату return без возвращаемого значения.
9.11 Оператор goto
Можно осуществлять безусловную передачу упраления с по-
мощью оператора
goto идентификатор ;
Идентификатор должен быть меткой (#9.12), расположенной
в текущей функции. Невозможно передать управление в обход
описания с инициализатором (явным или неявным) никак, кроме
передачи управления в обход внутреннего блока без захода в
него.
9.12 Помеченные Операторы
Перед любым оператором может стоять метка, имеющий вид
идентификатор :
которая служит для описания идентификатора как метки.
Метка используется только как объект перехода для goto. Об-
ластью видимости метки является текущая функция, исключая лю-
бой подблок, в котором был переописан этот же идентификатор.
См. #4.1.
9.13 Пустой Оператор
Пустой оператор имеет вид
;
Пустой оператор используется для помещения метки непос-
редственно перед *) составного оператора или того, чтобы
снабдить такие операторы, как while, пустым телом.
9.14 Оператор Описание
Оператор описание используется для введения нового иден-
тификатора в блоке; он имеет вид
Оператор_описание:
описание
Если введенный описанием идентификатор был описан ранее
во внешнем блоке, внешнее описание становится скрытым на про-
тяжении блока, после чего оно вновь всупает в силу.
Каждая инициализация auto и register переменных произво-
дится каждый раз, когда выполняется их оператор_описание.
Можно передавать управление в блок, но не таким путем, кото-
рый приводит к невыполнению инициализаций, см. #9.11. Инициа-
лизации переменных класса памяти static (#4.4) производятся
только один раз, когда программа начинает выполняться.
[Назад] [Содержание] [Вперед]
| Главная |