Инструкция switch вызывает передачу управления на одну из нескольких инструкций в зависимости от значения выражения, которое должен иметь целочисленный тип.
Управляемая с помощью switch подинструкция обычно составная. Любая инструкция внутри этой подинструкции может быть помечена одной или несколькими case -метками (A9.1). Управляющее выражение подвергается целочисленному повышению (A6.1), а case -константы приводятся к повышенному типу. После такого преобразования никакие две case -константы в одной инструкции switch не должны иметь одинаковых значений. Co switch -инструкцией может быть связано не более одной default -метки. Конструкции switch допускается вкладывать друг в друга; case и default -метки относятся к самой внутренней switch -инструкции из тех, которые их содержат.
Инструкция switch выполняется следующим образом. Вычисляется выражение со всеми побочными эффектами, и результат сравнивается с каждой case -константой. Если одна из case -констант равна значению выражения, управление переходит на инструкцию с соответствующей case -меткой. Если ни с одной из case -констант нет совпадения, управление передается на инструкцию с default -меткой, если такая имеется, в противном случае ни одна из подинструкций switch не выполняется.
В первой версии языка требовалось, чтобы выражение и case -константы в switch были типа int .
A9.5. Циклические инструкции
Циклические инструкции специфицируют циклы.
циклическая-инструкция :
while ( выражение ) инструкция
do инструкция while ( выражение )
for ( выражение необ ; выражение необ ; выражение необ ) инструкция
В инструкциях while и do выполнение подинструкций повторяется до тех пор, пока значение выражения не станет нулем. Выражение должно иметь арифметический тип или тип указателя. В while вычисление выражения со всеми побочными эффектами и проверка осуществляются перед каждым выполнением инструкции, a в do - после.
В инструкции for первое выражение вычисляется один раз, тем самым осуществляется инициализация цикла. На тип этого выражения никакие ограничения не накладываются. Второе выражение должно иметь арифметический тип или тип указателя; оно вычисляется перед каждой итерацией. Как только его значение становится равным 0, for прекращает свою работу. Третье выражение вычисляется после каждой итерации и, следовательно, выполняет повторную инициализацию цикла. Никаких ограничений на его тип нет. Побочные эффекты всех трех выражений заканчиваются по завершении их вычислений. Если подинструкция не содержит в себе continue ) то
for ( выражение 1 ; выражение 2 ; выражение З ) инструкция
эквивалентно конструкции
выражение 1 ;
while ( выражение 2 ) {
инструкция
выражение З ;
}
Любое из трех выражений цикла может быть опущено. Считается, что отсутствие второго выражения равносильно сравнению с нулем ненулевой константы.
A9.6. Инструкции перехода
Инструкции перехода осуществляют безусловную передачу управления.
инструкция-перехода :
goto идентификатор ;
continue ;
break ;
return выражение необ ;
В goto -инструкции идентификатор должен быть меткой (A9.1), расположенной в текущей функции. Управление передается на помеченную инструкцию.
Инструкцию continue можно располагать только внутри цикла. Она вызывает переход к следующей итерации самого внутреннего содержащего ее цикла. Говоря более точно, для каждой из конструкций
while (...){
...
contin: ;
}
do {
...
contin: ;
} while (...);
for (...){
...
contin: ;
}
инструкция continue , если она не помещена в еще более внутренний цикл, делает то же самое, что и goto contin .
Инструкция break встречается в циклической или в switch -инструкции, и только в них. Она завершает работу самой внутренней циклической или switch - инструкции, содержащей данную инструкцию break , после чего управление переходит к следующей инструкции.
С помощью return функция возвращает управление в программу, откуда была вызвана. Если за return следует выражение, то его значение возвращается вызвавшей эту функцию программе. Значение выражения приводится к типу так, как если бы оно присваивалось переменной, имеющей тот же тип, что и функция.
Читать дальше