Брайан Керниган - Язык программирования Си. Издание 3-е, исправленное
- Название:Язык программирования Си. Издание 3-е, исправленное
- Автор:
- Жанр:
- Издательство:Невский Диалект
- Год:2001
- Город:Санкт-Петербург
- ISBN:0-13-110362-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Брайан Керниган - Язык программирования Си. Издание 3-е, исправленное краткое содержание
Книга широко известных авторов, разработчиков языка Си, переработанная и дополненная с учетом стандарта ANSI для языка Си, 2-е английское издание которой вышло в 1988 году, давно стала классикой для всех изучающих и/или использующих как Си, так и Си++. Русский перевод этой книги впервые был выпущен изд- вом "Финансы и статистика" в 1992 г. и с тех пор пользуется неизменным спросом читателей.
Для настоящего третьего русского издания перевод заново сверен с оригиналом, в него внесены некоторые поправки, учитывающие устоявшиеся за прошедшие годы изменения в терминологии, а так же учтены замечания, размещенные автором на странице http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html.
Для программистов, преподавателей и студентов.
Издание подготовлено при участии издательства "Финансы и статистика"
Язык программирования Си. Издание 3-е, исправленное - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Инициализация автоматических объектов осуществляется при каждом входе в блок и продолжается по мере продвижения по объявителям. При передаче управления внутрь блока никакие инициализации не выполняются. Инициализации статических объектов осуществляются только один раз перед запуском программы.
A9.4. Инструкции выбора
Инструкции выбора осуществляют отбор одной из нескольких альтернатив, определяющих порядок выполнения инструкций.
инструкция-выбора :
if ( выражение ) инструкция
if ( выражение ) инструкция else инструкция
switch ( выражение ) инструкция
Оба вида if -инструкций содержат выражение, которое должно иметь арифметический тип или тип указателя. Сначала вычисляется выражение со всеми его побочными эффектами, результат сравнивается с 0. В случае несовпадения с 0 выполняется первая подинструкция. В случае совпадения с 0 для второго типа if выполняется вторая подинструкция. Связанная со словом else неоднозначность разрешается тем, что слово else соотносят с последней еще не имеющей else if -инструкцией, расположенной в одном с этим else блоке и на одном уровне вложенности блоков.
Инструкция 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 следует выражение, то его значение возвращается вызвавшей эту функцию программе. Значение выражения приводится к типу так, как если бы оно присваивалось переменной, имеющей тот же тип, что и функция.
Ситуация, когда "путь" вычислений приводит в конец функции (т. е. на последнюю закрывающую фигурную скобку), равносильна выполнению return - инструкции без выражения. При этом, а также в случае явного задания return без выражения возвращаемое значение не определено
А10. Внешние объявления
То, что подготовлено в качестве ввода для Си-компилятора, называется единицей трансляции. Она состоит из последовательности внешних объявлений, каждое из которых представляет собой либо объявление, либо определение функции.
единица-трансляции :
внешнее-объявление
единица-трансляции внешнее-объявление
внешнее-объявление :
определение-функции
объявление
Область видимости внешних объявлений простирается до конца единицы трансляции, в которой они объявлены, точно так же, как область видимости объявлений в блоке распространяется до конца этого блока. Синтаксис внешнего объявления не отличается от синтаксиса любого другого объявления за одним исключением: код функции можно определять только с помощью внешнего объявления.
Читать дальшеИнтервал:
Закладка: