netlib.narod.ru | < Назад | Оглавление | Далее > |
С момента публикации в 1978 г. книги «Язык программирования Си» в мире компьютеров произошла революция. Большие машины стали еще больше, а возможности персональных ЭВМ теперь сопоставимы с возможностями больших машин десятилетней давности. Язык Си за это время также изменился, хотя и не столь сильно, и вышел далеко за рамки инструментального языка операционной системы UNIX.
Рост популярности Си, накапливающиеся с годами изменения в языке, создание компиляторов коллективами разработчиков, ранее не причастных к проектированию языка, — все это привело к необходимости создания более точного и более современного описания языка, чем содержащееся в первом издании этой книги. В 1983 г. Американский институт национальных стандартов (American National Standards Institute, ANSI) учредил комитет, перед которым была поставлена цель выработать «однозначное и машинно-независимое определение языка Си», полностью сохранив при этом его стилистику. Результатом работы явился ANSI-стандарт языка Си.
Стандарт формализует конструкции, которые были только упомянуты, но не описаны подробно в первом издании, такие как присваивание структурам и перечисления. Он вводит новый вид описания функций, позволяющий проводить проверку согласованности вызовов функций с их определением; специфицирует стандартную библиотеку с широким набором функций ввода-вывода, управления памятью, манипуляций со строками символов и другими функциями; дает точноне описание особенностей поведения, не разъяснявшихся в первоначальном определении, и явно выделяет те аспекты, которые остаются машинно-зависимыми.
Во втором издании книги «Язык программирования Си» представлена версия Си, принятая в качестве стандарта ANSI. Мы решили описать язык заново, отметив при этом те места, в которых он претерпел изменения. В большинстве случаев это не привело к существенным переменам, самые заметные различия касаются новой формы описания и определения функции. Следует отметить, что современные компиляторы уже обеспечивают поддержку значительной части стандарта.
Мы попытались сохранить лаконичность первого издания. Си — небольшой язык, и чтобы его описать большой книги не требуется. В новом издании улучшено описание наиболее важных средств, таких как указатели, которые занимают центральное место в программировании на Си. Мы переработали старые примеры, а в некоторые главы добавлили новые. Например, описание сложных объявлений иллюстрируется программами, преобразующими объявления в их словесные описания и наоборот. Как и раньше, все примеры были протестированы прямо по текстам, взятым из электронной версии книги.
Приложение А — это справочное руководство, но отнюдь не стандарт. В нем мы попытались передать самые важные детали стандарта на минимальном числе страниц. Приложение предназначено для чтения программисами, а не как определение для разработчиков компиляторов — им следует обратиться непосредственно к стандарту. В приложении В описаны возможности стандартной библиотеки. Оно также представляет собой справочник для прикладных программистов, а не для разработчиков компиляторов. Приложение С содержит краткий перечень отличий представленной версии языка Си от его начальной версии.
В предисловии к первому изданию мы говорили о том, что Си «не теряет своих качеств с ростом опыта программиста». Это впечатление осталось и после десяти лет работы с ним. Мы надеемся, что данная книга поможет вам изучить язык Си и успешно его использовать.
Мы в большом долгу перед друзьями, которые помогали нам в выпуске второго издания книги. Джон Бентли (Jon Bently), Дуг Гуин (Doug Gwyn), Дуг Макилрой (Doug McIlroy), Питер Нельсон (Peter Nelson) и Роб Пайк (Rob Pike) сделали четкие замечания почти по каждой странице первого варианта рукописи. Мы благодарны Алу Ахо (Al Aho), Деннису Эллиссону (Dennis Allison), Джою Кемпбеллу (Joe Campbell), Г.Р. Эмлину (G.R. Emlin), Карен Фортганг (Karen Fortgang), Аллену Голубу (Allen Holub), Эндрю Хьюму (Andrew Hume), Дэйву Кристолу (Dave Kristol), Джону Линдерману (John Linderman), Дэйву Проссеру (Dave Prosser), Гину Спаффорду (Gene Spafford) и Крису Ван Уику (Chris van Wyk) за внимательное прочтение книги. Мы получили полезные советы от Билла Чезвика (Bill Cheswick), Марка Кернигана (Mark Kernighan), Эндрю Коэнига (Andy Koenig), Робина Лейка (Robin Lake), Тома Лондона (Tom London), Джима Ридза (Jim Reeds), Кловиза Тондо (Clovis Tondo) и Питера Вайнбергера (Peter Weinberger). Дейв Проссер (Dave Prosser) ответил на многочисленные вопросы, касающиеся деталей стандарта ANSI. Мы широко пользовались транслятором с Си++ Бьерна Страуструпа (Bjarne Stroustrup) для локальной проверки наших программ, а Дейв Кристол предоставил нам ANSI-Си-компилятор для окончательной их проверки. Рич Дрешлер (Rich Drechsler) очень помог в наборе книги.
Мы искренне благодарим всех.
Брайан В. Керниган
Деннис М. Ритчи
netlib.narod.ru | < Назад | Оглавление | Далее > |