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