Ричи язык программирования си: Язык программирования C | Ритчи Деннис М., Керниган Брайан У.
Содержание
Читать онлайн «Язык программирования Си. Издание 3-е, исправленное» автора Керниган Брайан — RuLit
Б. Керниган, Д. Ритчи
Язык программирования Си
Издание 3-е, исправленное
С момента публикации в 1978 г. книги «Язык программирования Си» в мире компьютеров произошла революция. Большие машины стали еще больше, а возможности персональных ЭВМ теперь сопоставимы с возможностями больших машин десятилетней давности. Язык Си за это время также изменился, хотя и не очень сильно; что же касается сферы применения Си, то она далеко вышла за рамки его начального назначения как инструментального языка операционной системы UNIX.
Рост популярности Си, накапливающиеся с годами изменения, создание компиляторов коллективами разработчиков, ранее не причастных к проектированию языка, — все это послужило стимулом к более точному и отвечающему времени определению языка по сравнению с первым изданием книги. В 1983 г. Американский институт национальных стандартов (American National Standards Institute — ANSI) учредил комитет, перед которым была поставлена цель выработать «однозначное и машинно-независимое определение языка Си», полностью сохранив при этом его стилистику. Результатом работы этого комитета и явился стандарт ANSI языка Си.
Стандарт формализует средства языка, которые в первом издании были только намечены, но не описаны, такие, например, как присваивание структурам и перечисления. Он вводит новый вид описания функций, позволяющий проводить повсеместную проверку согласованности вызовов функций с их определением; специфицирует стандартную библиотеку с широким набором функций ввода-вывода, управления памятью, манипуляций со строками символов и другими функциями; уточняет семантику, бывшую в первоначальном определении неясной, и явно выделяет то, что остается машинно-зависимым.
Во втором издании книги «Язык программирования Си» представлена версия Си, принятая в качестве стандарта ANSI. Мы решили описать язык заново, отметив при этом те места, в которых он претерпел изменения. В большинство параграфов это не привнесло существенных перемен, самые заметные различия касаются новой формы описания и определения функции. Следует отметить, что современные компиляторы уже обеспечили поддержку значительной части стандарта.
Мы попытались сохранить краткость первого издания. Си — небольшой язык, и чтобы его описать большой книги не требуется. В новом издании улучшено описание наиболее важных средств, таких как указатели, которые занимают центральное место в программировании на Си; доработаны старые примеры, а в некоторые главы добавлены новые. Так, для усиления трактовки сложных объявлений в качестве примеров включены программы перевода объявлений в их словесные описания и обратно. Как и раньше, все примеры были протестированы прямо по текстам, написанным в воспринимаемой машиной форме.
Приложение A — это справочное руководство, но отнюдь не стандарт. В нем мы попытались уложить самое существенное на минимуме страниц. По замыслу это приложение должно легко читаться программистом-пользователем: для разработчиков же компилятора определением языка должен служить сам стандарт. В приложении B приведены возможности стандартной библиотеки. Оно также представляет собой справочник для прикладных программистов, но не для разработчиков компиляторов. Приложение C содержит краткий перечень отличий представленной версии языка Си от его начальной версии.
В предисловии к первому изданию мы говорили о том, что «чем больше работаешь с Си, тем он становится удобнее». Это впечатление осталось и после десяти лет работы с ним. Мы надеемся, что данная книга поможет вам изучить Си и успешно его использовать.
Мы в большом долгу перед друзьями, которые помогали нам в выпуске второго издания книги. Джон Бентли, Дуг Гунн, Дуг Макилрой, Питер Нельсон и Роб Пайк сделали четкие замечания почти по каждой странице первого варианта рукописи. Мы благодарны Алу Ахо, Деннису Аллиссону, Джою Кемпбеллу, Г. Р. Эмлину, Карен Фортганг, Аллену Голубу, Эндрю Хьюму, Дэйву Кристолу, Джону Линдерману, Дэйву Проссеру, Гину Спаффорду и Крису Ван Уику за внимательное прочтение книги. Мы получили полезные советы от Билла Чезвика, Марка Кернигана, Эндрю Коэнига, Робина Лейка, Тома Лондона, Джима Ридза, Кловиза Тондо и Питера Вайнбергера. Дейв Проссер ответил на многочисленные вопросы, касающиеся деталей стандарта ANSI. Мы широко пользовались транслятором с Си++ Бьерна Страуструпа для локальной проверки наших программ, а Дейв Кристол предоставил нам ANSI Си-компилятор для окончательной их проверки. Рич Дрешлер очень помог в наборе книги. Мы искренне благодарим всех.
Брайан В. Керниган, Деннис М. Ритчи
Предисловие к первому изданию
Си — это универсальный язык программирования с компактным способом записи выражений, современными механизмами управления структурами данных и богатым набором операторов. Си не является ни языком «очень высокого уровня», ни «большим» языком, не рассчитан он и на какую-то конкретную область применения. Однако благодаря широким возможностям и универсальности для решения многих задач он удобнее и эффективнее, чем предположительно более мощные языки.
Первоначально Си был создан Деннисом Ритчи как инструмент написания операционной системы UNIX для машины PDP-11 и реализован в рамках этой операционной системы. И операционная система, и Си- компилятор, и, по существу, все прикладные программы системы UNIX (включая и те, которые использовались для подготовки текста этой книги — Имеется в виду оригинал этой книги на английском языке. — Примеч. пер.) написаны на Си. Фирменные Си-компиляторы существуют и на нескольких машинах других типов, среди которых 1ВМ/370, Honeywell 6000 и Interdata 8/32. Си не привязан к конкретной аппаратуре или системе, однако на нем легко писать программы, которые без каких-либо изменений переносятся на другие машины, где осуществляется его поддержка.
Цель нашей книги — помочь читателю научиться программировать на Си. Издание включает введение- учебник, позволяющий новичкам начать программировать как можно скорее, а также главы, посвященные основным свойствам языка, и справочное руководство. В ее основу положены изучение, написание и проработка примеров, а не простое перечисление правил. Почти все наши примеры — это законченные реальные программы, а не разобщенные фрагменты. Все они были оттестированы на машине точно в том виде, как приводятся в книге. Помимо демонстрации эффективного использования языка, там, где это было возможно, мы стремились проиллюстрировать полезные алгоритмы и принципы хорошего стиля написания программ и их разумного проектирования.
Эта книга не является вводным курсом по программированию. Предполагается, что читатель знаком с такими основными понятиями, как «переменная», «присваивание», «цикл», «функция». Тем не менее и новичок сможет изучить язык, хотя для него будет очень полезным общение с более знающими специалистами.
Наш опыт показал, что Си — удобный, выразительный и гибкий язык, пригодный для программирования широкого класса задач. Его легко выучить, и чем больше работаешь с Си, тем он становится удобнее. Мы надеемся, что эта книга поможет вам хорошо его освоить.
Вдумчивая критика и предложения многих друзей и коллег помогали нам написать книгу. В частности, Майк Бианки, Джим Блу, Стью Фелдман, Дуг Макилрой, Билл Рум, Боб Розин и Ларри Рослер со вниманием прочли все многочисленные варианты этой книги. Мы в долгу у Ала Ахо, Стива Бьерна, Дана Дворака, Чака Хейли, Мариои Харрис, Рика Холта, Стива Джонсона, Джона Машея, Боба Митца, Ральфа Мухи, Питера Нельсона, Эллиота Пинсона, Билла Плейджера, Джерри Спивака, Кена Томпсона и Питера Вайнбергера за полезные советы, полученные от них на различных стадиях подготовки рукописи, а также у Майка Леска и Джо Оссанны за помощь при подготовке ее к изданию.
Брайан В. Керниган, Деннис М. Ритчи
Си — универсальный язык программирования. Он тесно связан с системой UNIX, так как был разработан в этой системе, которая как и большинство программ, работающих в ней, написаны на Си. Однако язык не привязан жестко к какой-то одной операционной системе или машине. Хотя он и назван «языком системного программирования», поскольку удобен для написания компиляторов и операционных систем, оказалось, что на нем столь же хорошо писать большие программы другого профиля.
«Язык программирования Си» — Деннис Ритчи. О чем эта книга?
Влияние языка программирования Си на поколение программистов, которое впервые работало с ним в университетах и промышленной деятельности, заставило многих принять этот стиль программирования и соглашения авторов в качестве рекомендуемой, если не нормативной практики. Например, стиль кодирования и форматирования программ, представленных в обоих изданиях книги Денниса Ритчи и Брайана Кернигана, часто упоминается как «стиль K & R» и становится стилем кодирования, используемым в исходном коде для Unix и ядра Linux. Значимость этого языка сложно переоценить, ведь о нем знают даже люди, не разбирающиеся в программировании. Если вы хотите узнать о нем больше, обратите внимание на произведение «Язык программирования Си».
Что такое язык программирования «Си», кто создатель?
«Си» был создан Деннисом Ритчи в Лаборатории Белла в начале семидесятых годов прошлого столетия как дополненная версия языка программирования «Би» Кена Томпсона. Другой сотрудник Лаборатории Белла, Брайан Керниган, написал первое учебное пособие по «Си», и он убедил Ритчи стать соавтором этой работы. Брайан написал большую часть «пояснительного» материала книги, а справочное руководство Денниса стало дополнением.
Первое издание, опубликованное двадцать второго февраля семьдесят восьмого года, стало первой доступной книгой по языку программирования «Си». В апреле восемьдесят восьмого года было опубликовано второе издание работы, которое отражало изменения в языке, возникшие в связи с появлением нового стандарта ANSI C. Оно было переведено на более чем двадцать языков.
После этого стандарт ANSI C претерпел еще несколько изменений, последним из которых является ISO / IEC 9899: 2018 (также называемый C18), принятым в качестве стандарта ANSI в июне две тысячи восемнадцатого года.
Чтобы соответствовать более новым стандартам, был выпущен «Язык программирования Си», 3-е издание.
Книга «Язык программирования Си» — Деннис Ритчи, Брайан Керниган
«Язык программирования Си» представляет собой книгу по компьютерному программированию, написанную Брайаном Керниганом и Деннисом Ритчи. Ритчи разработал и реализовал этот язык, а также совместно с другим программистом создал операционную систему Unix, с которой развитие языка было тесно связано. Эта книга была центральной работой, игравшей главную роль в развитии и популяризации языка программирования Си.
Она используется для обучения и по сей день. Поскольку произведение было написано в соавторстве с разработчиком оригинального языка, а первое издание книги долгие годы служило стандартом де-факто для языка, многие считают его авторитетным справочником по языку программирования Си.
Отзывы людей о книге
Александра Ханенко, 27 лет: «Я программирую на Си уже почти пять лет, и, хотя это, конечно, не делает меня экспертом, я не решалась купить произведение из двухсот страниц, которое было, по сути, введением в язык. Что же, не заблуждайтесь, эта работа содержит в себе больше ценной информации, чем любая другая книга, которую я когда-либо читала. Мало того, что она не была слишком простой, некоторые из упражнений занимают у меня намного больше времени, чем могла бы представить моя гордость. Не стесняйтесь покупать эту книгу. Если вы любите язык Си, вы полюбите данную работу».
Константин Зелевский, 52 года: «Вы не найдете лучшего произведения о программировании на языке Си! Его легко читать, примеры программ действительно работают, и когда я впервые купил копию этой книги двадцать пять лет назад, я смог написать программу на Си для поиска в очень большой базе данных. Конечно, в те дни программа работала под MS-DOS, и мне не приходилось иметь дело с Windows API. Тем не менее, Керниган и Ритчи написали окончательный вариант этой работы для тех, кто хочет изучать ANSI C».
Похожие книги от других авторов
О языке программирования Си было опубликовано множество литературных произведений. К наиболее полезным и информативным из них можно отнести следующие работы:
- «Язык программирования C++», Бьёрн Страуструп.
- «Язык программирования C++. Базовый курс», Жозе Лажуа и Стенли Липпман.
- «Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ», Скотт Майерс.
Заключение
В августе тысяча девятьсот восемьдесят третьего года журнал «Byte» заявил: ««Язык программирования Си» — это окончательная работа о языке Си. Не читайте ничего другого, пока у вас не появится эта книга!». Не так давно Джерри Пурнел написал, что книга «все еще является стандартом». Он продолжил: «Вы можете изучать язык Си, не зная Кернигана и Ритчи, но это делает процесс обучения трудной задачей».
Язык программирования c керниган и ричи
Язык программирования Си | |
---|---|
The C Programming Language | |
Второе издание «The C Programming Language» | |
Автор | Брайан Керниган, Деннис Ритчи |
Жанр | Учебник |
Язык оригинала | Английский |
Оригинал издан | 1978 |
Страниц | 343 |
ISBN | ISBN 0-13-110163-3 |
«Язык программирования Си» (англ. The C Programming Language , также известная как K&R) — книга Брайана Кернигана и Денниса Ритчи, причём последний — один из непосредственных авторов и разработчиков языка Си. Книга стала основой для разработки и популяризации Си, до сих пор имеет спрос [1] и широко используется в качестве «классического» учебника по языку. Она долгое время была единственным справочным руководством и де-факто — стандартом языка.
Содержание
История [ править | править код ]
Первое издание [ править | править код ]
Книга, как и язык, которому она посвящена, родилась в компании AT&T Bell Labs. Первое издание увидело свет в 1978 году и было в те времена единственной широкодоступной книгой по Си. Версию языка, которая описывалась в книге, теперь часто называют K&R C (по первым буквами фамилий авторов) — в основном, для отличия от более позднего стандарта ANSI C, который был описан во втором издании. Кроме непосредственно учебного текста с примерами, рассчитанного на новичков в Си, книга содержала главы, посвящённые основным свойствам языка, а также справочник.
Второе издание [ править | править код ]
Второе издание было опубликовано спустя десять лет после первого, в 1988 году. В книге была представлена версия Си, принятая в качестве стандарта ANSI, добавлены новые разделы: описание стандартной библиотеки Си и краткий перечень отличий ANSI C от прежней версии. Это издание было переведено более чем на 25 языков [2] и получило мировую известность.
Хотя со времени своей первой публикации в 1989 году ANSI C неоднократно менялся, третье издание, которое бы осветило эти изменения, выпущено не было.
Влияние [ править | править код ]
Hello, world! [ править | править код ]
Возможно, что самым известным примером из книги стала программа «Hello, world!», которая выводит текст «hello, world» в терминал. Этот базовый пример показывает структуру минимальной программы на Си. После 1978 года почти все книги, посвящённые языкам программирования, продолжают традицию первого издания The C Programming Language и не обходятся без этой программы.
Стиль K&R [ править | править код ]
Стиль форматирования исходного текста программ, используемый в обоих изданиях книги, получил широкое распространение как стиль K&R. С его использованием оформлены, например, код Unix и ядро Linux.
Книга по программированию от авторов языка C.
В своё время она стала своеобразным классическим учебником по языку С и до сих пор является классикой для всех изучающих и/или использующих как С, так и С++.
На текущий момент книга переиздана уже в третий раз с учётом всех поправок и изменений в терминологии за прошедшее время.
Если вам понравилась эта книга поделитесь ею с друзьями, тем самым вы помогаете нам развиваться и добавлять всё больше интересных и нужным вам книг!
В свое время язык Си разрабатывали специально для операционной системы Unix, но созданный язык был настолько универсален, что нашел свое применение и в других сферах программирования.
Книга Кернигана и Ритчи – это культовая книга по программированию на языке Си. Создатели языка рассказывают своим читателям о широких возможностях Си и особенностях, отличающих его от других языков структурного программирования.
Авторы поднимают в своей книге такие фундаментальные темы, как:
- Переменные и арифметические выражения в Си
- Типы данных, операторы и выражения
- Управляющие конструкции в Си
- Структура программы на языке Си
- Работа с функциями
- Указатели и массивы
- Применение структур данных
- Ввод и вывод данных в Си
- Интерфейс с системой Unix
Для уже опытных программистов в книге содержится полное справочное руководство по языку Си, а также описание стандартной библиотеки Си.
Книга рассчитана на разработчиков с любым уровнем подготовки.
Издательство: «Невский диалект»
Год издания: 2001
Издание: 3-е исправленное
Скачано: 20159 раз
Скачать книгу
Комментарии
Яков, 11.03.2011 21:22
Лучшая книга для легкого и с изысками изучения Си
remarkes, 20.12.2011 03:42
да, согласен – лучшая книга по Си
gemly, 03.09.2012 19:51
книжка как книжка
Vasiliy, 13.09.2012 08:51
Единственная книга по Си. Последовательное изложение, хорошие примеры и задачи, справочная часть достаточного объёма – Керниган и Ритчи посторались на славу!
ok-svi, 27.11.2012 11:40
mne ochen nravitsia
Leonid, 19.12.2012 00:22
Еще бы вам не нравилось. Хорошо когда книгу по языку пишет тот кто придумал этот язык 😉
Marvin, 28.07.2013 22:50
если не первая, то вторая книга для прочтения
Lev, 16.11.2015 00:19
У кого есть свободный экземпляр-поделитесь,нужен для занятий,можно чирканый и юзаный.89252335911
Николай, 09.06.2016 22:53
Говорят, что ее переиздавали в США неоднократно
Язык С (Керниган, Ричи)
Б.В. Керниган, Д.М. Ричи.
2
АННОТАЦИЯ
Язык “C”(произносится “си”) — это универсальный язык программирования, для которого характерны экономичность выражения, современный поток управления и структуры данных, богатый набор операторов. Язык “C” не является ни языком “очень высокого уровня”, ни “большим” языком, и не предназначается для некоторой специальной области применения. но отсутствие ограничений и общность языка делают его более удобным и эффективным для многих задач, чем языки, предположительно более мощные.
Язык “C”, первоначально предназначавшийся для написания операционной системы “UNIX” на ЭВМ DEC PDP-11, был разработан и реализован на этой системе Деннисом Ричи. Операционная система, компилятор с языка “C” и по существу все прикладные программы системы “UNIX” (включая все программное обеспечение, использованное при подготовке этой книги) написаны на “C”. Коммерческие компиляторы с языка “C” существуют также на некоторых других ЭВМ, включая IBM SYSTEM/ 370, HONEYWELL 6000, INTERDATA 8/32. Язык “C”, однако, не связан с какими-либо определенными аппаратными средствами или системами, и на нем легко писать программы, которые можно пропускать без изменений на любой ЭВМ, имеющей “C”-компилятор.
Эта книга предназначена для того, чтобы помочь читателю научиться программировать на языке “C”. Она содержит учебное введение, цель которого — позволить новым пользователям начать программировать как можно быстрее, отдельные главы по всем основным особенностям языка и справочное руководство. Обучение построено в основном на чтении, написании и разборе примеров, а не голой формулировке правил. Примеры, приводимые в книге, по большей части являются законченными реальными программами, а не отдельными фрагментами. Все примеры были проверены непосредственно с текста книги, где они напечатаны в виде, пригодном для ввода в машину. Кроме указаний о том, как сделать использование языка более эффективным, мы также пытались, где это возможно, проиллюстрировать полезные алгоритмы и принципы хорошего стиля и разумной разработки.
Настоящая книга не является вводным курсом в программирование; она предполагает определенное знакомство с основными понятиями программирования такими как переменные, операторы присваивания, циклы, функции. Тем не менее и новичок в программировании должен оказаться в состоянии читать подряд и освоиться с языком, хотя при этом была бы полезной помощь более опытного коллеги.
По нашему опыту , “C” показал себя приятным, выразительным и
«Язык С» Б.В. Керниган, Д.М. Ричи | 3 |
разносторонним языком на широком множестве разнообразных программ. Его легко выучить , и он не теряет своих качеств с ростом опыта программиста. Мы надеемся , что эта книга поможет вам хорошо его использовать.
Вдумчивая критика и предложения многих наших друзей и коллег очень много добавили как для самой книги, так и для нашего удовольствия при ее написании. В частности, Майк Биапси, Джим Блю, Стью Фельдман, Доуг Мак-Илрой, Билл Рум, Боб Розин и Ларри Рослер тщательно прочитали множество вариантов. Мы также обязаны Элю Ахо, Стиву Борну, Дэву Двораку, Чаку Хэлею, Дебби Хэлей, Мариону Харрису, Рику Холту, Стиву Джонсону, Джону Машею, Бобу Митцу, Ральфу Мьюа, Питеру Нельсону, Эллиоту Пинсону, Биллу Плагеру, Джерри Спиваку, Кену Томпсону и Питеру Вейнбергеру за полезные замечания на различных этапах и Майку Лоску и Джо Осанна за неоценимую помощь при печатании книги.
Брайен В. Керниган Деннис М. Ричи
4
СОДЕРЖАНИЕ
АННОТАЦИЯ ……………………………………………………………………………………. | 2 | |
СОДЕРЖАНИЕ ………………………………………………………………………………….. | 4 | |
0.1. | ВВЕДЕНИЕ. ………………………………………………………………………………. | 9 |
1. | Учебное введение. …………………………………………………………………….. | 14 |
1.1. | Hачинаем. …………………………………………………………………………………. | 14 |
1.2. | Переменные и арифметика. ……………………………………………………….. | 17 |
1.3. | Оператор FOR. ………………………………………………………………………….. | 21 |
1.5. | Набор полезных программ. ……………………………………………………….. | 23 |
1.5.1. | Ввод и вывод символов. …………………………………………………….. | 23 |
1.5.2. | Копирование файла. ………………………………………………………….. | 23 |
1.5.3. | Подсчет символов. …………………………………………………………….. | 25 |
1.5.4. | Подсчет строк. ………………………………………………………………….. | 27 |
1.5.5. | Подсчет слов. ……………………………………………………………………. | 28 |
1.6. | Массивы. ………………………………………………………………………………….. | 30 |
1.7. | Функции. ………………………………………………………………………………….. | 32 |
1.8. | Аргументы — вызов по значению. ……………………………………………….. | 34 |
1.9. | Массивы символов. …………………………………………………………………… | 35 |
1.10. | Область действия: внешние переменные. …………………………………… | 38 |
2. | ТИПЫ, ОПЕРАЦИИ И ВЫРАЖЕНИЯ. ………………………………….. | 40 |
2.1. | Имена переменных. …………………………………………………………………… | 40 |
2.2. | Типы и размеры данных. …………………………………………………………… | 40 |
2.3. | Константы. ……………………………………………………………………………….. | 41 |
2.3.1. | Символьная константа. ……………………………………………………… | 42 |
2.3.2. | Константное выражение ……………………………………………………. | 42 |
2.3.3. | Строчная константа …………………………………………………………… | 43 |
2.4. | Описания ………………………………………………………………………………….. | 43 |
2.5. | Арифметические операции………………………………………………………… | 44 |
2.6. | Операции отношения и логические операции …………………………….. | 45 |
2.7. | Преобразование типов ………………………………………………………………. | 46 |
2.8. | Операции увеличения и уменьшения …………………………………………. | 50 |
2.9. | Побитовые логические операции……………………………………………….. | 52 |
2.10. | Операции и выражения присваивания………………………………………… | 54 |
2.11. | Условные выражения. ……………………………………………………………….. | 55 |
2.12. | Старшинство и порядок вычисления. …………………………………………. | 57 |
3. | ПОТОК УПРАВЛЕНИЯ ………………………………………………………….. | 59 |
3.1. | Операторы и блоки ……………………………………………………………………. | 59 |
3.2. | IF — ELSE …………………………………………………………………………………… | 59 |
3.3. | ELSE — IF …………………………………………………………………………………… | 61 |
3.4. | Переключатель ………………………………………………………………………….. | 62 |
3.5. | Циклы — WHILE и FOR ……………………………………………………………… | 64 |
3.6. | Цикл DO — WHILE …………………………………………………………………….. | 67 |
3.7. | Оператор BREAK ……………………………………………………………………… | 68 |
|
| «Язык С» Б.В. Керниган, Д.М. Ричи | 5 |
3.8. | Оператор CONTINUE ……………………………………………………………….. | 69 | |
3.9. | Оператор GOTO и метки …………………………………………………………… | 70 | |
4. | ФУНКЦИИ И СТРУКТУРА ПРОГРАММ. …………………………….. | 72 | |
4.1. | Основные сведения. ………………………………………………………………….. | 72 | |
4.2. | Функции, возвращающие нецелые значения. ……………………………… | 75 | |
4.3. | Еще об аргументах функций. …………………………………………………….. | 78 | |
4.4. | Внешние переменные. ………………………………………………………………. | 79 | |
4.5. | Правила, определяющие область действия. ………………………………… | 83 | |
4.5.1. |
| Область действия. ……………………………………………………………… | 83 |
4.6. | Статические переменные. ………………………………………………………….. | 87 | |
4.8. | Блочная структура. ……………………………………………………………………. | 89 | |
4.9. | Инициализация. ………………………………………………………………………… | 90 | |
4.10. | Рекурсия. ………………………………………………………………………………….. | 92 | |
4.11. Препроцессор языка “C”……………………………………………………………. | 93 | ||
4.11.1. | Включение файлов ……………………………………………………………. | 93 | |
4.11.2. | Макроподстановка ……………………………………………………………. | 94 | |
5. | УКАЗАТЕЛИ И МАССИВЫ …………………………………………………… | 96 | |
5.1. | Указатели и адреса…………………………………………………………………….. | 96 | |
5.2. | Указатели и аргументы функций ………………………………………………… | 98 | |
5.3. | Указатели и массивы ………………………………………………………………. | 100 | |
5.4. | Адресная арифметика …………………………………………………………….. | 103 | |
5.5. | Указатели символов и функции ……………………………………………….. | 106 | |
5.6. | Указатели — не целые. ……………………………………………………………… | 109 | |
5.7. | Многомерные массивы. ………………………………………………………….. | 110 | |
5.8. | Массивы указателей; указатели указателей ……………………………… | 112 | |
5.9. | Инициализация массивов указателей. ……………………………………… | 116 | |
5.10. | Указатели и многомерные массивы …………………………………………. | 117 | |
5.11. | Командная строка аргументов …………………………………………………. | 117 | |
5.12. | Указатели на функции …………………………………………………………….. | 122 | |
6. | СТРУКТУРЫ. ………………………………………………………………………. | 126 | |
6.1. | Основные сведения. ……………………………………………………………….. | 126 | |
6.2. | Структуры и функции……………………………………………………………… | 128 | |
6.3. | Массивы сруктур. …………………………………………………………………… | 130 | |
6.4. | Указатели на структуры. …………………………………………………………. | 135 | |
6.5. | Структуры, ссылающиеся на себя. …………………………………………… | 137 | |
6.6. | Поиск в таблице. …………………………………………………………………….. | 141 | |
6.7. | Поля. | ……………………………………………………………………………………… | 144 |
6.8. | Объединения. …………………………………………………………………………. | 146 | |
6.9. | Определение типа …………………………………………………………………… | 148 | |
7. | ВВОД И ВЫВОД …………………………………………………………………… | 150 | |
7.1. | Обращение к стандартной библиотеке …………………………………….. | 150 | |
7.2. | Стандартный ввод и вывод — функции GETCHAR и PUTCHAR .. | 150 | |
7.3. | Форматный вывод — функция PRINTF ……………………………………… | 152 |
6
7.5. | Форматное преобразование в памяти ………………………………………. | 157 |
7.6. | Доступ к файлам …………………………………………………………………….. | 158 |
7.7. | Обработка ошибок — STDERR и EXIT ……………………………………… | 161 |
7.8. | Ввод и вывод строк ………………………………………………………………… | 162 |
7.9. | Несколько разнообразных функций…………………………………………. | 163 |
7.9.1. | Проверка вида символов и преобразования……………………… | 163 |
7.9.2. | Функция UNGETC …………………………………………………………. | 164 |
7.9.3. | Обращение к системе ……………………………………………………… | 164 |
7.9.4. | Управление памятью ………………………………………………………. | 164 |
8. | ИНТЕРФЕЙС СИСТЕМЫ UNIX …………………………………………. | 165 |
8.1. | Дескрипторы файлов………………………………………………………………. | 165 |
8.2. | Низкоуровневый ввод/вывод — операторы READ и WRITE. ……… | 166 |
8.3. | Открытие, создание, закрытие и расцепление (UNLINK). ………… | 168 |
8.4. | Произвольный доступ — SEEK и LSEEK. …………………………………. | 170 |
8.5. | Пример — реализация функций FOPEN и GETC. ………………………. | 171 |
8.6. | Пример — распечатка справочников …………………………………………. | 175 |
8.7. | Пример — распределитель памяти…………………………………………….. | 179 |
9.ПРИЛОЖЕНИЕ А:
| СПРАВОЧНОЕ РУКОВОДСТВО ПО ЯЗЫКУ ‘C’ ……………….. | 184 | |
9.1. | Введение ………………………………………………………………………………… | 184 | |
10. | Лексические соглашения ………………………………………………………… | 184 | |
10.1. Комментарии ………………………………………………………………………….. | 184 | ||
10.2. Идентификаторы (имена) ………………………………………………………… | 184 | ||
10.3. Ключевые слова ……………………………………………………………………… | 185 | ||
10.4. Константы ……………………………………………………………………………… | 185 | ||
10.4.1. | Целые константы ……………………………………………………………. | 185 | |
10.4.2. | Явные длинные константы ……………………………………………… | 185 | |
10.4.3. | Символьные константы…………………………………………………… | 186 | |
10.4.4. | Плавающие константы ……………………………………………………. | 186 | |
10.5. Строки …………………………………………………………………………………… | 186 | ||
10.6. Характеристики аппаратных средств ………………………………………. | 187 | ||
11. | Синтаксическая нотация …………………………………………………………. | 187 | |
12. | Что в имене тебе моем? ………………………………………………………….. | 187 | |
14. | Преобразования ……………………………………………………………………… | 189 | |
14.1. | Символы и целые ……………………………………………………………………. | 189 | |
14.2. | Типы FLOAT и DOUBLE ………………………………………………………… | 189 | |
14.3. | Плавающие и целочисленные величины ………………………………….. | 189 | |
14.4. | Указатели и целые ………………………………………………………………….. | 190 | |
14.5. | Целое без знака ………………………………………………………………………. | 190 | |
14.6. | Арифметические преобразования ……………………………………………. | 190 | |
15. | Выражения …………………………………………………………………………….. | 191 | |
15.1. | Первичные выражения ……………………………………………………………. | 191 | |
15.2. | Унарные операции ………………………………………………………………….. | 193 |
| «Язык С» Б.В. Керниган, Д.М. Ричи | 7 |
15.3. Мультипликативные операции ………………………………………………… | 195 | |
15.4. Аддитивные операции…………………………………………………………….. | 195 | |
15.5. Операции сдвига …………………………………………………………………….. | 196 | |
15.6. Операции отношения ……………………………………………………………… | 196 | |
15.7. Операции равенства ……………………………………………………………….. | 196 | |
15.8. Побитовая операция ‘и’ ………………………………………………………….. | 197 | |
15.9. | Побитовая операция исключающего ‘или’ Выражение- ………………… |
|
| исключающего-или: ……………………………………………………………….. | 197 |
15.10. Побитовая операция включающего ‘или’ Выражение- …………………. |
| |
| включающего-или:………………………………………………………………….. | 197 |
15.11.Логическая операция ‘и’ …………………………………………………………. | 197 | |
15.12.Операция логического ‘или’ ……………………………………………………. | 197 | |
15.13.Условная операция …………………………………………………………………. | 198 | |
15.14.Операция присваивания ………………………………………………………….. | 198 | |
15.15.Операция запятая ……………………………………………………………………. | 199 | |
16. | Описания ……………………………………………………………………………….. | 199 |
16.1. Спецификаторы класса памяти ……………………………………………….. | 200 | |
16.2. Спецификаторы типа ………………………………………………………………. | 200 | |
16.3. Описатели ………………………………………………………………………………. | 201 | |
16.4. Смысл описателей ………………………………………………………………….. | 201 | |
16.5. Описание структур и объединений ………………………………………….. | 203 | |
16.6. Инициализация ………………………………………………………………………. | 206 | |
16.7. Имена типов …………………………………………………………………………… | 208 | |
16.8. TYPEDEF ………………………………………………………………………………. | 209 | |
17. | Операторы ……………………………………………………………………………… | 209 |
17.1. Операторное выражение …………………………………………………………. | 209 | |
17.2. Составной оператор (или блок) ……………………………………………….. | 210 | |
17.3. Условные операторы ………………………………………………………………. | 210 | |
17.4. Оператор WHILE ……………………………………………………………………. | 210 | |
17.5. Оператор DO ………………………………………………………………………….. | 211 | |
17.6. Оператор FOR ………………………………………………………………………… | 211 | |
17.7. Оператор SWITCH …………………………………………………………………. | 211 | |
17.8. Оператор BREAK …………………………………………………………………… | 212 | |
17.9. Оператор CONTINUE …………………………………………………………….. | 212 | |
17.10. Оператор возврата …………………………………………………………………. | 213 | |
17.11. Оператор GOTO …………………………………………………………………….. | 213 | |
17.12. Помеченный оператор ……………………………………………………………. | 213 | |
17.13. Пустой оператор ……………………………………………………………………. | 213 | |
18. | Внешние определения …………………………………………………………….. | 214 |
18.1. | Внешнее определение функции ………………………………………………. | 214 |
18.2. | Внешние определения данных ………………………………………………… | 215 |
19. | Правила, определяющие область действия ………………………………. | 215 |
19.1. | Лексическая область действия ………………………………………………… | 216 |
8
19.2. | Область действия внешних идентификаторов ………………………….. | 217 |
20. | Строки управления компилятором …………………………………………… | 217 |
20.1. | Замена лексем ………………………………………………………………………… | 217 |
20.2. | Включение файлов …………………………………………………………………. | 218 |
20.3. | Условная компиляция ……………………………………………………………… | 218 |
21. | Неявные описания ………………………………………………………………….. | 219 |
22. | Снова о типах …………………………………………………………………………. | 219 |
22.1. Структуры и объединения……………………………………………………….. | 219 | |
22.2. Функции ………………………………………………………………………………… | 220 | |
22.3. Массивы, указатели и индексация …………………………………………… | 220 | |
22.4. Явные преобразования указателей…………………………………………… | 221 | |
23. | Константные выражения …………………………………………………………. | 222 |
24. | Соображения о переносимости ……………………………………………….. | 223 |
25. | Анахронизмы …………………………………………………………………………. | 224 |
26. | Сводка синтаксических правил ……………………………………………….. | 224 |
26.1. | Выражения …………………………………………………………………………….. | 224 |
26.2. | Описания ……………………………………………………………………………….. | 226 |
26.3. | Операторы составной-оператор: ……………………………………………… | 228 |
26.4. | Внешние определения Программа: …………………………………………. | 228 |
27. | Присваивание структуры ………………………………………………………… | 229 |
28. | Тип перечисления …………………………………………………………………… | 230 |
29. | Таблица изображений непечатных символов языка “C”……………. | 231 |
«Язык С» Б.В. Керниган, Д.М. Ричи | 9 |
0.1. ВВЕДЕНИЕ.
Язык “C” является универсальным языком программирования. Он тесно связан с операционной системой “UNIX” , так как был развит на этой системе
итак как “UNIX” и ее программное обеспечение написано на “C”. Сам язык , однако, не связан с какой-либо одной операционной системой или машиной;
ихотя его называют языком системного программирования, так как он удобен для написания операционных систем, он с равным успехом использовался при написании больших вычислительных программ, программ для обработки текстов и баз данных.
Язык “C” — это язык относительно “низкого уровня”. В такой характеристике нет ничего оскорбительного; это просто означает, что “C” имеет дело с объектами того же вида, что и большинство ЭВМ, а именно, с символами, числами и адресами. Они могут объединяться и пересылаться посредством обычных арифметических и логических операций, осуществляемых реальными ЭВМ.
Вязыке “C” отсутствуют операции, имеющие дело непосредственно с составными объектами, такими как строки символов, множества, списки или с массивами, рассматриваемыми как целое. Здесь, например, нет никакого аналога операциям PL/1, оперирующим с целыми массивами и строками. Язык не предоставляет никаких других возможностей распределения памяти, кроме статического определения и механизма стеков, обеспечиваемого локальными переменных функций; здесь нет ни “куч”(HEAP), ни “сборки мусора”, как это предусматривается в АЛГОЛЕ-68. Наконец, сам по себе “C” не обеспечивает никаких возможностей ввода-вывода: здесь нет операторов READ или WRITE и никаких встроенных методов доступа к файлам. Все эти механизмы высокого уровня должны обеспечиваться явно вызываемыми функциями.
Аналогично, язык “C” предлагает только простые, последовательные конструкции потоков управления: проверки, циклы, группирование и подпрограммы, но не мультипрограммирование, параллельные операции, синхронизацию или сопрограммы.
Хотя отсутствие некоторых из этих средств может выглядеть как удручающая неполноценность (“выходит, что я должен обращаться к функции, чтобы сравнить две строки символов ?!”), но удержание языка в скромных размерах дает реальные преимущества. Так как “C” относительно мал, он не требует много места для своего описания и может быть быстро выучен. Компилятор с “C” может быть простым и компактным. Кроме того, компиляторы легко пишутся; при использовании современной технологии
10
можно ожидать написания компилятора для новой ЭВМ за пару месяцев и при этом окажется, что 80 процентов программы нового компилятора будет общей с программой для уже существующих компиляторов. Это обеспечивает высокую степень мобильности языка. Поскольку типы данных и стуктуры управления, имеющиеся в “C”, непосредственно поддерживаются большинством существующих ЭВМ, библиотека, необходимая во время прогона изолированных программ, оказывается очень маленькой. На PDP -11, например, она содержит только программы для 32-битового умножения и деления и для выполнения программ ввода и вывода последовательностей. Конечно, каждая реализация обеспечивает исчерпывающую, совместимую библиотеку функций для выполнения операций ввода-вывода, обработки строк и распределения памяти, но так как обращение к ним осуществляется только явно, можно , если необходимо, избежать их вызова; эти функции могут быть компактно написаны на самом “C”.
Опять же из-за того , что язык “C” отражает возможности современных компьютеров, программы на “C” оказываются достаточно эффективными, так что не возникает побуждения писать вместо этого программы на языке ассемблера. Наиболее убедительным примером этого является сама операционная система “UNIX”, которая почти полностью написана на “C”. Из 13000 строк программы системы только около 800 строк самого низкого уровня написаны на ассемблере. Кроме того, по существу все прикладное программное обеспечение системы “UNIX” написано на “C”; подавляющее большинство пользователей системы “UNIX”(включая одного из авторов этой книги) даже не знает языка ассемблера PDP-11.
Хотя “C” соответствует возможностям многих ЭВМ, он не зависит от какой-либо конкретной архитектуры машины и в силу этого без особых усилий позволяет писать “переносимые” программы, т.е. программы, которые можно пропускать без изменений на различных аппаратных средствах. В наших кругах стал уже традицией перенос программного обеспечения, разработанного на системе “UNIX”, на системы ЭВМ: HONEYWELL, IBM и INTERDATA. Фактически компиляторы с “C” и программное обеспечение во время прогона программ на этих четырех системах, по-видимому, гораздо более совместимы, чем стандартные версии фортрана американского национального института стандартов (ANSI). Сама операционная система “UNIX” теперь работает как на PDP-11, так и на INTERDATA 8/32. За исключением программ, которые неизбежно оказываются в некоторой степени машинно-зависимыми, таких как компилятор, ассемблер и отладчик. Написанное на языке “C” программное обеспечение идентично на обеих машинах. Внутри самой операционной системы 7000 строк программы, исключая математическое обеспечение языка ассемблера ЭВМ и управления операциями ввода-вывода, совпадают на 95 процентов.
Программистам, знакомым с другими языками, для сравнения и противопоставления может оказаться полезным упоминание нескольких
Создание и развитие языка Си (C)
Автор Айтистанция На чтение 4 мин Просмотров 28 Опубликовано
Язык Си (C) был создан в начале 70-х годов Дэннисом Ритчи, который работал в компании Bell Telephone Laboratories. Родословная языка Си (C) берет свое начало от языка Алгол и включает в себя Паскаль и ПЛ/I.
Си (C) был разработан как язык для программирования в новой по тем временам операционной системе Unix. ОС Unix была написана на языке ассемблера для ЭВМ PDP-7 и перенесена затем на PDP-11. На язык Си (C) оказал значительное влияние его предшественник, язык Би, созданный Кэном Томпсоном, который в свою очередь является последователем языка BCPL. Язык ВСРL был создан в 1969 г . Мартином Ричардсом в рамках проекта «Комбинированный язык программирования» в Кэмбриджском университете в Лондоне. Вскоре Unix была переписана на языке Си (C), и в 1974 — 75 годах OC Unix фирмы Bell Laboratories стала первым коммерческим продуктом, реализующим идею о том, что операционная система может быть успешно написана на языке высокого уровня, если этот язык является достаточно мощным и гибким.
Книга «Язык программирования Си (C)»
В 1978 г . Брайан Керниган и Дэннис Ритчи написали книгу «Язык программирования Си (C)» (издательство Prentice-Hаll). Эта работа, которая в своем кругу называлась «белой книгой» и «K & R» в остальном мире, стала стандартом описания языка Си (C). На момент создания «K & R» существовали компиляторы языка Си (C) для ЭВМ PDP-11, Interdata 8/32, Honeywell 6000 и IBM 370. В дальнейшем этот список был продолжен.
Компиляторы языка Си (C)
В конце 70-х начали появляться трансляторы Си (C) для микроЭВМ на процессорах 8080 и Z80 с операционной системой СР/M. Скотт Газери и Джим Гибсон разработали и пустили в продажу Тiny-C («Крошечный Си (C)») — интерпретатор, основанный на подмножестве языка Си (C). Его интерактивная среда программирования очень похожа на ту, что имеет чрезвычайно популярный транслятор Basic фирмы Microsoft. В 1980 г . Рон Кэйн создал свой компилятор Small-C («Малый Си (C)») для ОС СР/М и микропроцессора 8080. Компилятор Small-C, основанный на подмножестве языка Си (C), был написан на самом Small-C. Проблема курицы и яйца была решена, когда Кэйн создал первую версию компилятора на основе интерпретатора Тiny-C. Затем Small-C методом раскрутки создал самого себя, когда Кэйн вместе с другими, используя ранние версии компилятора, сделалболее совершенный компилятор. Small-C компилирует исходный модуль на языке Си (C) в модуль на языке ассемблера процессора 8080. Следует отметить, что Кэйн предоставил свой компилятор и его исходный текст в общественную собственность.
Примерно в это же время Лео Золман представил свой компилятор BDS-C для СР/М, также основанный на подмножестве языка Си (C). Достоинствами этого компилятора были высокая скорость и возможность совместной компоновки перемещаемых объктных модулей в загрузочном модуле.Вскоре после BDS-C были созданы компиляторы, предназначенные для СР/М и основанные на полном множестве языка Си (C). Это дало импульс развитию программирования на Си (C) для микроЭВМ. В 1981 г ., в связи с созданием IBM PC, в мире микроЭВМ был сделан значительный скачок вперед.
После появления IBM PC стали появляться и компиляторы Си (C) для этой ПЭВМ. Некоторые компиляторы были получены путем преобразования соответствующих компиляторов для процессора 8080, другие были разработаны специально для IBM PC. В настоящее время на рынке представлены по меньшей мере семнадцать компиляторов языка Си (C) для IBM PC.В 1983 г .
Американский Институт Стандартов (ANSI) сформировал Технический Комитет X3J11, устав которого предусматривает создание стандарта языка Си (C). Стандартизация будет распространяться не только на язык, но и на программную среду компилятора, а также на библиотеку стандартных функций. В работе комитета участвуют представители основных фирм — поставщиков компиляторов Си (C), в том числе и для IBM PC, а также многие другие светила из мира программирования на языке Си (C).
Усилия комитета X3J11 привлекли внимание средств массовой информации. Предлагаемый стандарт был опубликован, для того чтобы все заинтересованные стороны могли ознакомиться с ним и внести свои предложения. (Сомнительно, что выдающийся программист заинтересуется языком, который создан комитетом, но, видимо, комитет делает хорошее дело, совершенствуя язык, созданный выдающимся программистом). Поскольку большинство поставщиков компиляторов для IBM PC участвуют в работе комитета X3J11, то разрабатываемые ими новые версии компиляторов будут в рамках этого стандарта. (Турбо Си (C), один из последних компиляторов для IBM PC, подчиняется большинству требований стандарта на язык и библиотеку).
Похожие материалы
Книга: Язык программирования Си. Издание 3-е, исправленное — Деннис М Ритчи — КнигаГо
Б. Керниган, Д. Ритчи
Язык программирования Си
Издание 3-е, исправленное
Предисловие
С момента публикации в 1978 г. книги «Язык программирования Си» в мире компьютеров произошла революция. Большие машины стали еще больше, а возможности персональных ЭВМ теперь сопоставимы с возможностями больших машин десятилетней давности. Язык Си за это время также изменился, хотя и не очень сильно; что же касается сферы применения Си, то она далеко вышла за рамки его начального назначения как инструментального языка операционной системы UNIX.
Рост популярности Си, накапливающиеся с годами изменения, создание компиляторов коллективами разработчиков, ранее не причастных к проектированию языка, — все это послужило стимулом к более точному и отвечающему времени определению языка по сравнению с первым изданием книги. В 1983 г. Американский институт национальных стандартов (American National Standards Institute — ANSI) учредил комитет, перед которым была поставлена цель выработать «однозначное и машинно-независимое определение языка Си», полностью сохранив при этом его стилистику. Результатом работы этого комитета и явился стандарт ANSI языка Си.
Стандарт формализует средства языка, которые в первом издании были только намечены, но не описаны, такие, например, как присваивание структурам и перечисления. Он вводит новый вид описания функций, позволяющий проводить повсеместную проверку согласованности вызовов функций с их определением; специфицирует стандартную библиотеку с широким набором функций ввода-вывода, управления памятью, манипуляций со строками символов и другими функциями; уточняет семантику, бывшую в первоначальном определении неясной, и явно выделяет то, что остается машинно-зависимым.
Во втором издании книги «Язык программирования Си» представлена версия Си, принятая в качестве стандарта ANSI. Мы решили описать язык заново, отметив при этом те места, в которых он претерпел изменения. В большинство параграфов это не привнесло существенных перемен, самые заметные различия касаются новой формы описания и определения функции. Следует отметить, что современные компиляторы уже обеспечили поддержку значительной части стандарта.
Мы попытались сохранить краткость первого издания. Си — небольшой язык, и чтобы его описать большой книги не требуется. В новом издании улучшено описание наиболее важных средств, таких как указатели, которые занимают центральное место в программировании на Си; доработаны старые примеры, а в некоторые главы добавлены новые. Так, для усиления трактовки сложных объявлений в качестве примеров включены программы перевода объявлений в их словесные описания и обратно. Как и раньше, все примеры были протестированы прямо по текстам, написанным в воспринимаемой машиной форме.
Приложение A — это справочное руководство, но отнюдь не стандарт. В нем мы попытались уложить самое существенное на минимуме страниц. По замыслу это приложение должно легко читаться программистом-пользователем: для разработчиков же компилятора определением языка должен служить сам стандарт. В приложении B приведены возможности стандартной библиотеки. Оно также представляет собой справочник для прикладных программистов, но не для разработчиков компиляторов. Приложение C содержит краткий перечень отличий представленной версии языка Си от его начальной версии.
В предисловии к первому изданию мы говорили о том, что «чем больше работаешь с Си, тем он становится удобнее». Это впечатление осталось и после десяти лет работы с ним. Мы надеемся, что данная книга поможет вам изучить Си и успешно его использовать.
Мы в большом долгу перед друзьями, которые помогали нам в выпуске второго издания книги. Джон Бентли, Дуг Гунн, Дуг Макилрой, Питер Нельсон и Роб Пайк сделали четкие замечания почти по каждой странице первого варианта рукописи. Мы благодарны Алу Ахо, Деннису Аллиссону, Джою Кемпбеллу, Г. Р. Эмлину, Карен Фортганг, Аллену Голубу, Эндрю Хьюму, Дэйву Кристолу, Джону Линдерману, Дэйву Проссеру, Гину Спаффорду и Крису Ван Уику за внимательное прочтение книги. Мы получили полезные советы от Билла Чезвика, Марка Кернигана, Эндрю Коэнига, Робина Лейка, Тома Лондона, Джима Ридза, Кловиза Тондо и Питера Вайнбергера. Дейв Проссер ответил на многочисленные вопросы, касающиеся деталей стандарта ANSI. Мы широко
Деннис Ритчи — отец языка программирования С
Деннис Ритчи — это человек создавший очень популярный язык программирования — «C», или как его еще называют — «Отец языка программирования С». Деннис родился 9 сентября 1941 года в Бронксвиле, штат Нью-Йорк. Его отец Алистер Ритчи работал системным инженером в Bell Labalatories.
Немного позже Ритчи с семьей переехали в Нью-Джерси, окончил высшую школу Саммита, затем получил степень бакалавра в Гарвардском университете, в области физики и математики в 1963, а потом Доктора философии математики в 1968.
Деннис — один из ключевых разработчиков ядра Unix, а также соавтор книги «Денис Ритчи Язык программирования С». Он работал с Кеном Томсоном, человеком, который написал оригинальный Unix. Позже он работал над языком Си вместе с Брайеном Керниганом, их вместе еще называли K & R — Керниган и Ритчи. Денис сделал очень большой вклад в Unix. Особенно в то, что Unix была портирована для различных платформ. Его идеи до сих пор живут в центре дизайна операционных систем практически во всех новых языках программирования и в каждом бите информации.
Содержание статьи:
Карьера Ритчи
Деннис Ритчи начал свою карьеру в 1967 году — Bell Laboratories, центре вычислительных исследований. Это один из самых известных центров цифровых инноваций в мире, а также место где родился транзистор.
Джон Ким, президент Alcatel-Lucent Bell Labs, говорил:
Деннис хорошо относился к своим коллегам в Bell Labs, и нам его будет очень не хватать. Он по-настоящему вдохновлял всех нас. Не только своими многочисленными достижениями, а еще и потому что он был другом, изобретателем, скромным и милым человеком. Мы хотели бы выразить глубочайшие соболезнования семье Ритчи и всем кто каким-либо образом был с ним связан.
Unix
В Bell Labs Ритчи работал над проектом Multics. Эта то была операционная система, которая должна была совместить идею пакетной обработки и интерактивности. Программа запускалась из карточного стека, и программист, оператор или сам пользователь имел полный контроль над выполнением программы. Тогда Денис встретил Кена Томсона, который позже станет одним из главных сотрудников Ритчи:
Одной из очевидных вещей почему коммерческий успех Multics не состоялся было то что она очень сложна. В ней было слишком много всего — Деннис Ритчи
Вскоре Bell Labs перестали работать над Multics, но Ритчи и Кен решили не отказываться от идеи взаимодействия с пользователем, и начали работать над его приемником — Unix. Теперь это современная операционная система, ее распространение началось в 1973 году.
Язык программирования Си
Разнообразие компьютерных платформ семидесятых годов плохо отразилось на жизни создателей программного обеспечения. Им нужно было либо тратить время и энергию на создание своего программного обеспечения для различных новых платформ, либо ограничить свои программы работой только на одной платформе.
Оригинальное ядро Unix было написано на ассемблере, но Ритчи и Кен решили, что им нужен язык высокого уровня, чтобы получить больше контроля над всеми данными и операционной системой.
Они использовали BCPL (Basic Combined Programming Language) чтобы написать UNIX, сжали его до восьми килобайт и переименовали в B.
Потом Ритчи пошел еще дальше и разработал новый язык программирования, называемый С. Это была модернизация языка B, добавившая типы данных и новый синтаксис. B был интерпретируемым языком, для его выполнения была необходима прослойка между процессором и командами языка, Си же компилируемый. Он сначала переводится в машинный код, а затем уже выполняется непосредственно процессором.
UNIX — простая операционная система, но вы должны быть гением чтобы понять ее простоту. — Деннис Ритчи
Программы, написанные на С могли легко и быстро переносится на другие платформы, на которых может работать Си. Си имел очень простой синтаксис и небольшое количество инструкций, а также модульную структуру. Из-за этого его было легко использовать на разных компьютерах. Существовали огромные блоки кода на Си, которые каждый разработчик мог скопировать и вставить в свою программу без необходимости все писать с нуля. Такие блоки кода были легко доступны с помощью библиотек, поэтому программисты могли очень быстро получить к ним доступ.
Ритчи и Кен переписали UNIX на Си, и это дало ему возможность переносимости, а также дало возможность программистам использовать одну операционную систему, один язык программирования и небольшой набор инструментов. Поэтому Unix позже и занял свое место операционной системы для экспериментов и создания сетей между компьютерами.
«Очевидно, что человек, который имел наибольшее влияние на мою карьеру это Кен Томпсон.» — Деннис Ритчи
В 1978 году была издана книга Денниса Ритчи и Браена Кенигана — Язык программирования Си. Книга охватывает краткое введение в язык Си, а также различные техники и стили программирования. Эта книга остается практическим руководством для многих программистов до сих пор.
К середине 1980 язык Си стал одним из самых популярных языков программирования в мире. Из-за функциональности и скорости, с которой Си может быть легко использован для создания программного обеспечения и запуска его на различных платформах, многие компании начали использовать Си для разработки своих продуктов.
Язык программирования Си все еще используется в настоящее время как второй по популярности язык программирования в мире для создания прикладных систем, операционных систем, и развития встраиваемых систем. Его влияние все еще заметно во многих современных языках. Так же как и концепции UNIX сейчас считаются вычислительными заповедями.
«С уже был реализован для нескольких совершенно различных машин и операционных систем, UNIX уже распространяется на PDP-11, но переносимость всей системы была совершенно новой.» — Денис Ритчи
Последний важный вклад, который сделал Деннис Ритчи в Unix, это механизм потоков, который используется для соединения устройств, приложений и протоколов.
Windows, Mac, Linux и…
Потомков Unix и языка Си трудно пересчитать, это Linux, Android, Mac OS, IOS, JavaScript, C++ и многие другие, которые используются в мире интернет-технологий, полном разработчиков программного обеспечения.
Многочисленные приложения написаны на С или на его объективно ориентированном потомке С++. Си был стандартизирован ANSI и ISO, потому что на основе него сегодня строится почти каждый аспект информационной индустрии.
В качестве примера языков, которые были созданы позже на основе Си можно привести С++ или JavaScript, кроме того, браузеры написаны на Си. Microsoft Windows изначально была написана на Си, и даже обе операционных системы от Apple основаны на Unix.
Нет никаких сомнений, что вклад Денниса Ритчи значительно изменили ядро компьютерной индустрии.
Стиль программирования, который обеспечивается в Си, вероятно, будет использоваться все меньше и меньше. Но JavaScript и XML будут продолжать становиться все более важными. — Деннис Ритчи
Ричти позже стал руководителем департамента исследований компьютерных систем в Lucent Technologies и стремился сделать компьютеры проще и лучше для пользователей, вплоть до своего выхода на пенсию в 2007 году.
Награды
- Награда АСМ за выдающиеся успехи в системах и языках в 1974 году.
- Награда IEEE Emmanuel Piore в 1982
- Награда сотруднику Bell Labs в 1984
- Премия имени Тьюринга в 1983 году
- Награда ACM Software Systems в 1983
- Был номинирован Национальной академией инженеринга Соединенных Штатов Америки в 1963
- Медаль IEEE Хэмминга в 1990.
- Член музея компьютерной истории в 1997 году.
- Национальная медаль Соединенных Штатов от президента Билла Клинтона за его работу над операционной системой UNIX и языком программирования C В апреле 1999 года.
- Премия от Industrial Research Institute за его ценный вклад в науку и технологии в 2005 году.
- Японская премия по информатизации и разработке UNIX в 2011 году.
Все награды, которые получил Деннис Ритчи также получил и Кен Томсон.
Смерть Ритчи
Деннис жил сам в своем доме в Беркли Хайтс штат Нью Джерси. Был найден мертвым 12 октября 2011 года. Причины и точное время смерти неизвестны. Последние несколько лет у него было слабое здоровье после лечения рака предстательной железы и сердечно сосудистых заболеваний.
Он умер через неделю после смерти Стива Джобса, но это не было так ярко освещено прессой. Релиз Fedora Linux 16 в 2012 году был посвящен памяти Денниса Ритчи.
Пол Крези, компьютерный историк, после смерти Ритчи сказал:
«Ритчи всегда был за кулисами, его имя не было известно обывателям, но, если заглянуть в компьютер с микроскопом, следы его работы встречаются повсюду»
Перевод: http://www.unixmen.com/dennis-m-ritchie-father-c-programming-language/
Оцените статью:
Загрузка…
Язык программирования C — Керниган и Ричи
Язык программирования C, или, как его еще называют, K&R (после
авторов, Брайан Керниган и Деннис Ричи) является классикой в своем стремительном
расширяющееся поле. Если вы читаете это, на самом деле, у вас, вероятно, уже есть
Это. А если у вас его нет, вам стоит.
Язык программирования C — это книга, которая означает бизнес. То, что вы получаете
при покупке это 272 (189 без приложения) страницы чистого С. Есть
никаких рассуждений о хорошем стиле программирования или философии, никакого обсуждения
дизайн или конструкция.Эта книга представляет собой введение в язык, чистый и
просто. Вы начинаете с простых операторов вывода и заканчиваете системой UNIX.
звонки, а между ними вы получаете почти все, что может язык
делать — не слишком удивительный подход, учитывая, что соавтор Ричи был
оригинальный создатель C. Существенное приложение, которое для кого-то уже
знакомы с C — это самая полезная часть книги, содержащая краткое изложение
спецификации языка, от спецификаций для встроенных библиотек до
определение токена.Это очень удобно, учитывая, что
аннотированная спецификация ANSI для C занимает более 700 страниц; K&R просто скажет вам, что вы
нужно знать.
Сочетание строгого учебника и удобного справочника делает язык программирования C
полезен для программиста на всех уровнях C. Учебник
сама движется в быстром темпе, не прекращая приводить пример за примером, и
некоторых новичков это может сбить с толку. Но объяснения в книге
предельно ясный, хотя и слегка плотный, примеры хорошо подобраны и
подробно объяснил.В книге есть упражнения, которые помогут читателю
чувство его прогресса; ключ ответа продается отдельно.
Вам не нужно ничего знать о программировании, чтобы читать C
Язык программирования
, хотя помогает. Вам не скажут, что за переменная
есть или что делает компиляция, но книга не ожидает тонких нюансов
признательность за алгоритмическую эффективность или даже знание того, что это за функция
является. Базовая терминология и концепции программирования объясняются по мере продвижения.
но вас не бьют ими по голове; это не C для
Глубоко плотный .
Язык программирования C идеален как для новичков в программировании, так и для
люди, которые уже знают, как программировать, но хотели бы использовать C в качестве второго
(или третий или четвертый …) язык. Для более продвинутых читателей розыгрыш книги
в основном в возможности найти загадочные детали языка (в котором
приоритет, ИЛИ или XOR?). Читатели, которые никогда не слышали о UNIX,
никогда не трогал компилятор и патологически боялся циклов while
может сначала захотеть взглянуть на более мягкое введение, но для всех остальных
Язык программирования C — бесценный ресурс.
История языка программирования c
Создание C
Язык программирования c
был создан Деннисом Ричи в 1971 году. Он является производным от языка программирования B
, созданного Кеном Томпсоном в 1969 году. Язык программирования B является производным от языка программирования BCPL
, созданного Мартином Ричардсом в 1966 году.
Все эти языка были затронуты так или иначе, с языком программирования Algol 60
, созданным в 1960 году.
Язык программирования C имел сходство с как BCPL, так и B, но в основном отличался типизированным языком.
Справочники для языка программирования C , между 1971 и 1974 годами, были:
Классический, или традиционный, или k & R, C
Позже, были внесены некоторые изменения в программирование язык . Например, добавление новых типов, таких как: short
и union
, нотация для приведения: (имя-типа), выражение
и возможность создавать имя для новых типов с помощью оператора: typedef
.Эта версия C известна как классическая или традиционная или k & R
C.
Ссылка для языка программирования c
в период с 1976 по 1983 год была:
Некоторые синтаксические изменения , существовали между C
1974 и классическим C
, например, при инициализации переменной.
int y 3; / * Инициализируем переменную в C 1974 * / int y = 3; / * Инициализируем переменную в C 1978 * /
И некоторые семантические изменения, существовавшие между C
1974 и классическим C
, например:
у = -2; / * Уменьшаем y на 2, в C 1974 * / у = -2; / * Присваиваем -2 к y в C 1978 * /
Переносная библиотека для ввода и вывода также описана в справочнике.
ANSI C или C89 или C90
После этого в язык были внесены дальнейшие изменения, такие как добавление типа enum
и квалификатора const
, а также некоторые семантические изменения. Таким образом, необходимо было стандартизировать , , язык программирования C.
В 1983 году Американский институт национальных стандартов сформировал комитет X3J11
. Целью этого комитета была стандартизация языка программирования C.
В 1989 г. комитет выпустил стандарт ANSI C 1989
, принятый международной организацией по стандартизации ISO как ISO / IEC 9899: 1990.
Ansi C представил новый способ объявления функций , , старый способ все еще можно использовать с некоторыми ограничениями.
Например, в классическом C функция может быть объявлена следующим образом:
имя (список аргументов, если есть) объявления аргументов, если есть { декларации и заявления, если таковые имеются }
В то время как в ANSI C функции заявлены:
возвращаемый тип имя-функции (объявления аргументов) { декларации и заявления }
ANSI C также изменил семантическое значение , шестнадцатеричного и восьмеричного целочисленного литерала, которые теперь сначала считаются типом int, а не типом unsigned int
.
ANSI C, а также представили стандартную библиотеку C , которая содержит набор переносимых заголовков. Заголовки объявляют некоторые функции, например, объявление функций ввода и вывода, а также определяют некоторые макросы и типы.
Проект стандарта ISO / IEC 9899: 1990 C
можно найти здесь .
Более поздние версии
После выпуска стандарта ISO / IEC 9899: 1990 C
работа по стандартизации продолжилась.Эти усилия по стандартизации являются всего лишь пересмотром стандарта C
.
Эти ревизии содержат некоторые дополнения или удаления к стандартной библиотеке C, например, удаление получает функцию
в ревизии c11
.
Или это просто некоторые синтаксические или семантические изменения в языке C, такие как добавление некоторых ключевых слов, таких как ключевое слово _Atomic
, в стандарт c11
.
Ревизии следующие:
Все версии C более или менее совместимы с прямой версией .
Цель языка C
Программа C, скомпилирована на машинный язык . Это переносимо, если вы придерживаетесь стандарта C и стандартной библиотеки C.
Таким образом, язык программирования C является переносимым, у вас есть прямой контроль над машиной, и между вашими программами и компьютером нет виртуальной машины или интерпретатора, поэтому язык C
— это , используемый для системного программирования .
Когда был создан C, он был создан как язык программирования операционной системы Unix.
Другие ссылки
Изобретатели C (язык программирования), C (язык программирования)
C — это универсальный императивный язык компьютерного программирования, поддерживающий структурное программирование, область видимости лексических переменных и рекурсию, а система статических типов предотвращает многие непреднамеренные операции. По своей конструкции C предоставляет конструкции, которые эффективно отображаются на типичные машинные инструкции, и поэтому он нашел прочное применение в приложениях, которые ранее были написаны на языке ассемблера, включая операционные системы, а также в различном прикладном программном обеспечении для компьютеров, от суперкомпьютеров до встроенных систем. .
C был первоначально разработан Деннисом Ричи между 1969 и 1973 годами в AT&T Bell Labs и использовался для (ре) реализации операционной системы Unix. С тех пор он стал одним из наиболее широко используемых языков программирования всех времен с компиляторами C. от различных поставщиков, доступных для большинства существующих компьютерных архитектур и операционных систем. C был стандартизирован Американским национальным институтом стандартов (ANSI) с 1989 года, а затем Международной организацией по стандартизации (ISO).
Многие более поздние языки прямо или косвенно заимствованы из C, включая C ++, D, Go, Rust, Java, JavaScript, Limbo, LPC, C #, Objective-C, Perl, PHP, Python, Verilog (язык описания оборудования) и Оболочка C Unix. Эти языки заимствовали многие из своих управляющих структур и других базовых функций из C, обычно с общим синтаксическим сходством с C, который иногда включает в себя идентичные простые управляющие структуры. C также используется в качестве промежуточного языка для других языков и для создания стандартных библиотек и среды выполнения. системы для языков более высокого уровня, такие как CPython.
Ранние разработки
Происхождение C тесно связано с разработкой операционной системы Unix, первоначально реализованной на языке ассемблера на PDP-7 Ричи и Томпсоном с использованием нескольких идей коллег. В конце концов они решили перенести операционную систему на PDP-11. Первоначальная версия Unix для PDP-11 была разработана на языке ассемблера. Разработчики рассматривали возможность переписать систему с использованием языка B, упрощенной версии BCPL Томпсона.Однако неспособность B воспользоваться некоторыми функциями PDP-11, особенно байтовой адресацией, привела к C.
Разработка C началась в 1972 году в системе PDP-11 Unix и впервые появилась в версии 2 Unix. Изначально язык не разрабатывался с учетом переносимости, но вскоре он стал работать и на других платформах: компилятор для Honeywell 6000 был написан в течение первого года истории C, а вскоре последовал перенос на IBM System / 370.
Также в 1972 году большая часть Unix была переписана на C.К 1973 году, с добавлением структурных типов, язык C стал настолько мощным, что большая часть ядра Unix теперь находилась на C.
Unix был одним из первых ядер операционной системы, реализованных на языке, отличном от ассемблера. (Более ранние экземпляры включают систему Multics (написанную на PL / I) и MCP (Master Control Program) для Burroughs B5000, написанную на ALGOL в 1961 году.) Примерно в 1977 году в язык были внесены дальнейшие изменения Ричи и Стивеном Джонсоном. для облегчения переносимости операционной системы Unix.Портативный компилятор Си Джонсона послужил основой для нескольких реализаций Си на новых платформах.
Обзор книги по языку программирования K&R C
SomeDudeSays.com является участником программы Amazon Services LLC Associates, партнерской рекламной программы, разработанной для того, чтобы мы могли получать вознаграждение за счет ссылок на Amazon.com и связанные с ней сайты.
K&R C Book рекламируется как книга, которую нужно получить, если вы хотите выучить C.Это работа Брайана Кернигана и Денниса Ричи (создавших язык Си). Первое издание было стандартом де-факто для языка C, а второе издание до сих пор широко читается. Книга K&R C — это не просто языковая книга, это образец хороших стандартов. Даже если вы не хотите изучать C, это все равно отличная модель для обучения языку, а также для документирования спецификации.
Когда я только начал писать код, каждый серьезный программист говорил мне начинать с этого. В конце концов мне удалось найти использованную копию.Мой первый экземпляр был первым изданием книги. Хотя это был K&R C, он работал для подавляющего большинства задач даже с более новыми (на тот момент) компиляторами.
Книга K&R привела меня от незнания к умению работать со встроенными системами на C. C невероятно прост, но в то же время чрезвычайно богат. Книга K&R установила стандарт, который показал, в чем хорош C, она позволила вам по-настоящему понять язык, и все, что вам осталось, это информатика и конкретные библиотеки, которых книга не включает.К тому времени, как вы закончили, не возникло никаких вопросов относительно того, что может и что не может базовый язык.
Что это покрывает?
Книга K&R — это сокровище, потому что она охватывает всю языковую спецификацию. Очень немногие другие языки имеют отдельные книги, которые могут охватывать всю спецификацию, и еще меньшее количество решило сделать это удовлетворительным образом. Он также охватывает многие из базовых библиотек, которые необходимы, чтобы сделать C полезным для взаимодействия с системой. Эта книга, по сути, приведет вас к тому, что вы сможете использовать язык в полной мере для любой реальной задачи с небольшими знаниями темы.
Он охватывает основные особенности и функции языка, но также включает полезные примеры. Например, во вводном учебном разделе рассказывается, как реализовать программу для подсчета символов и другую программу для подсчета слов (на английском языке). В конце каждого раздела включены упражнения для читателя, которые действительно укрепляют тему.
«Язык программирования C» как образец книги по программированию
Язык программирования C C Кернигана и Ритчи — это не просто хорошая книга по программированию, это модель того, каким должно быть техническое письмо.Включая базовую структуру языка и комбинируя ее с общими алгоритмами и вариантами использования, с которыми может столкнуться настоящий программист, он обучает C естественным и эффективным способом. Я перечитал эту книгу, готовясь к написанию книги Lua.
Он разбивает язык на концептуальные единицы (как это делается в большинстве хороших книг по программированию), такие как поток управления, типы данных, функции и т. Д. Его выделяет то, что каждая отдельная концепция разбита доступным способом. Например, , если операторы представлены в общей форме if ([выражение]) {[что делать]} , то предоставляются фактические примеры.Он показывает, как выглядит общая структура, а затем показывает, как заполнить каждую часть. Затем авторы предоставляют примеры, которые сначала являются базовыми, а затем более применимыми примерами для реальных упражнений по кодированию. Они также показывают, чего нельзя делать и почему. В конце их объяснения действительно не возникает вопросов, что работает, а что нет.
Этот рабочий процесс кажется здравым, но многие языковые книги не могут обеспечить такой уровень ясности и надлежащей основы. Язык программирования C начинается с описания использования и грамматики данной структуры и детализирует ее в контексте языка и программирования в целом.Несмотря на то, что я люблю Lua, книга «Программирование в Lua » бесполезна в качестве отдельного учебного пособия из-за того, что она не следует этому типу рабочего процесса.
Актуален ли C?
Почти каждая современная операционная система написана на C или производной от C. Ядро Linux написано на C, и многие основные инструменты по-прежнему написаны на C. Ядро NT для Windows также по-прежнему в значительной степени написано на C. MacOS использует Objective-C, который является ANSI C с новой объектной системой, встроенной для написания многих своих приложений.C по-прежнему присутствует практически во всем, если вы посмотрите достаточно внимательно.
C также полезен для разработки встроенных систем. Со многими микроконтроллерами ARM и другими платами проще всего работать на C. C дает вам возможность максимально эффективно использовать ограниченные ресурсы, но при этом достаточно абстракции, чтобы сосредоточиться на текущей проблеме. Другие языки могут лучше работать с этой задачей на более мощных контроллерах, но C в основном всегда будет хорошим выбором для всего низкого уровня.
Такие языки, как Perl и Lua, имеют много библиотек на основе C, к которым они привязаны.Даже такие вещи, как Python, поддерживают библиотеки на основе C (хотя Python в большинстве случаев предпочитает C ++). Хотя книга K&R C не научит вас всему этому, она научит вас языку в достаточной степени, чтобы вам нужно было только сосредоточиться на обучении, чтобы расширить его для задачи, над которой вы работаете.
Обучение языку C и обучение языку C
Эта книга познакомит вас со всей базовой спецификацией ANSI C. Она учит таким образом, чтобы дать возможность тем, кто практически не знает программирования, действительно начать работу.Однако это не касается компилятора или чего-то подобного, поэтому вам нужно будет найти это где-нибудь в другом месте. Как только вы научитесь работать со своим компилятором и набором инструментов, эта книга проведет вас через весь язык, существующий в каждой среде.
Вам нужно научиться складывать части и элементы для данной задачи, но, в отличие от C ++ или многих других языков, у вас будет весь базовый язык в одном кратком томе. Книга также учит некоторым основным алгоритмам и структурам данных, так что вы действительно можете использовать язык.Он учит некоторым базовым реализациям деревьев и быстрой сортировки среди прочего, хотя объяснения для них очень краткие.
Даже если вы не хотите изучать C, эта книга научит вас изучать C, который можно распространить на другие языки. Это лучшая существующая модель для преподавания и изучения языка программирования. Организация исключительна, и глубина этой книги позволяет передать, что такая краткость является стандартом того, какой должна быть техническая документация. Эта книга должна быть на книжной полке каждого программиста, даже если он не работает с C.
Получите это здесь:
Язык программирования C Керниган и Ричи | Мартин О’Брайен | Glasswall Engineering
Kernighan & Ritchie’s The C Programming Language — лучшая книга о языке C. Это небольшая книга, но, как сказано в предисловии, « C — небольшой язык, и большая книга для него не подходит. »Я полностью согласен. Книги размером с небольшую башню отпугивают потенциальных читателей и могут напугать.
В книге описан язык, определенный стандартом ANSI. Это важно само по себе. Код, написанный с использованием стандартных конструкций C, переносится на любой компилятор, соответствующий стандарту. Это сводит к минимуму переделку кода при передаче от одного компилятора к другому или между платформами.
Книга начинается с введения в учебное пособие, в котором показаны основные элементы языка в реальных программах. Это скорее обзор, поэтому детали и правила не являются предметом внимания. В нем основное внимание уделяется основам: переменным и константам, арифметике, потоку управления, функциям и некоторым вводам и выводам.
Затем книга переходит к типам, операторам, выражениям, потоку управления и всем другим аспектам.
Если я и критиковал книгу, так это то, что важная информация часто спрятана в середине абзаца. Здесь нет фанфар, текст не выделен жирным шрифтом, будет просто указано что-то вроде
. Если символ, следующий за \ , не является одним из указанных, поведение не определено.
(см. §A2.5.2 Символьные константы).Вы действительно не хотите неопределенного поведения в ваших программах¹. Несмотря на то, что эти крупицы важной информации не акцентируются, это небольшая проблема. Информация, необходимая для написания хороших программ на языке C, находится там, вам просто нужно внимательно ее прочитать. (В моем старом и хорошо пролистанном экземпляре книги я действительно подчеркиваю такой важный текст и помечаю его звездочкой на полях!) C, это стоит прочитать.
Большинство глав книги заканчиваются упражнениями. Это стоит того. Однако мне нравится знать, что мои решения соответствуют передовой практике и являются надежными. Язык программирования C не предлагает этого, но вы можете купить The C Answer Book от Tondo & Gimpel, который предлагает решения для всех упражнений в книге. Сами по себе они дают очень полезное представление о том, как разрабатывать и писать код на C (некоторые вопросы довольно сложные, другие — простые).
Соавтор Деннис Ричи разработал и реализовал язык C в операционной системе UNIX на DEC PDP-11. Брайан Керниган внес свой вклад в развитие UNIX. Эти технические знания означают, что примеры кода в книге могут быть полезны программистам и разработчикам, предоставляя некоторые полезные утилиты.
Например, одна из программ-примеров — это битов
. Это получает указанное количество битов из указанной позиции в значении (из интереса, эта функция однострочная!).Упражнения для этой главы просят читателя написать setbits
, invert
и rightrot
. Все очень полезные функции при выделении битовых шаблонов в данных, как это делает Glasswall при судебном анализе документов.
С другой стороны, в главе «Интерфейс системы Unix » вы познакомитесь с разработкой и реализацией кода, который показывает, как использовать некоторые из наиболее важных системных вызовов из программы на языке C. Глава разделена на три основные части: ввод / вывод, файловая система и распределение памяти.Это все низкоуровневый код и дидактический характер; действительно очень поучительно!
Две связанные программы, представленные в книге, я использовал довольно часто: dcl
и undlc
. dcl
преобразует объявление C в словесное описание, а undcl
преобразует его обратно. Например, если вы передадите это в dcl
char (* (* x ()) []) ()
Он отобразит
«x - это функция, возвращающая указатель на массив указателей на функции, возвращающие char. ».
Вы можете передать описание слова в undcl
, и он отобразит синтаксис C. В этом случае мы используем сокращение для текстового описания, поэтому ()
используется для обозначения функции, []
означает массив, *
означает указатель. Приведенное выше описание будет передано в undlc
следующим образом:
x () * [] * () char
, который отобразит объявление, показанное ранее. Программы наглядны и не являются пуленепробиваемыми. Улучшения оставлены в виде упражнений.Тем не менее, они очень полезны. (Можно надеяться, что такие сложные декларации требуются не часто!)
Приложение А к книге содержит справочное руководство по языку. Приложение B — это краткое изложение стандартной библиотеки (в нем опущены многобайтовые символы и обсуждение вопросов локали).
Мое первое высказывание о том, что C является лучшей книгой по программированию, звучит слегка иронично, но я не встречал книги C, в которой также был бы представлен этот язык, причем в такой сжатой и точной манере. .Я очень рекомендую книгу.
Деннис Ричи, отец языка программирования Unix и C, умер по адресу 70
Деннис Ричи, разработчик программного обеспечения, который принес миру язык программирования C и операционную систему Unix, умер в возрасте 70 лет.
Ричи (известный под ником «dmr») был частью дуэта динамичных разработчиков программного обеспечения с Кеном. Томпсона из Bell Labs, к которому они присоединились в 1967 и 1966 годах соответственно. Ричи создал язык программирования C, который заменил язык программирования B, изобретенный Томпсоном.
Позже они создали Unix, первоначально для миникомпьютеров и написанный на ассемблере, в 1969 году и написанный на C в 1973 году. Unix стал ключевым программным обеспечением для критически важной вычислительной инфраструктуры во всем мире, хотя и не для этого. все.
Ричи однажды сказал: «UNIX очень проста, нужен только гений, чтобы понять ее простоту». Unix, конечно же, стал источником вдохновения для новых операционных систем, включая Linux и iOS от Apple.
UNIX AT 40: Прошлое, настоящее и будущее революционной ОС
ПРЕДЫСТОРИЯ: Вихревой тур по основным наградам, премиям и почестям в области вычислительной техники и телекоммуникаций
Фактически, сторонники Unix в социальных сетях отсутствуют на этой неделе, чтобы удостовериться, что достижения Ричи признаны.
Джон «Мэддог» Холл, исполнительный директор Linux International, написал в Твиттере: «… все программисты обязаны ему минутой молчания».
Роб Пайк, который работал с Ричи в Bell Labs, в том числе над планом 9-го потомка Unix, написал в Google+: «Он был тихим и в основном частным человеком, но он также был моим другом, коллегой и сотрудником, и мир потерял поистине великий разум «.
Многие другие упомянули книгу «Язык программирования C», которую Ричи и Брайан Керниган написали в соавторстве и впервые опубликовали в 1978 году, отметив, что она до сих пор лежит на их книжных полках для удобного использования.Книгу обычно называют K&R в честь фамилий авторов.
Ричи при жизни был неоднократно признан за свои достижения. Совсем недавно он и Томпсон получили премию Японии в размере 600 000 долларов за свою работу над Unix.
Ричи и Томпсон ранее выиграли премию Тьюринга от Ассоциации вычислительной техники в 1983 году и Национальную медаль США за технологии и инновации в 1998 году, врученную им президентом Биллом Клинтоном. Эти двое также были удостоены звания стипендиатов Музея истории компьютеров в 1997 году.
Ричи ушел из Lucent Technologies в 2007 году. Bell Labs теперь является отделом исследований и разработок Alcatel-Lucent. Кончина Ричи знаменует собой третью смерть гигантов технологической индустрии за последнюю неделю. Стив Джобс умер на прошлой неделе в возрасте 56 лет, а бывший генеральный директор Motorola и лидер индустрии мобильных телефонов Роберт У. Гэлвин умер ранее на этой неделе в возрасте 89 лет.
Присоединяйтесь к сообществам Network World на Facebook и LinkedIn, чтобы комментировать самые важные темы.
Copyright © 2011 IDG Communications, Inc.
«Чертовски глупый поступок» — истоки C
Увеличить / Как бы трудно ни было в это поверить, но Си не просто родился в поношенной форме в мягкой обложке.
В той или иной форме C повлиял на форму почти всех языков программирования, разработанных с 1980-х годов. Некоторые языки, такие как C ++, C # и objective C, предназначены для того, чтобы стать прямыми преемниками этого языка, в то время как другие языки просто адаптировали синтаксис C.Программисту, знакомому с Java, PHP, Ruby, Python или Perl, не составит большого труда понять простые программы на C, и в этом смысле C можно рассматривать почти как lingua franca среди программистов.
Но Си не возник полностью из воздуха как некий программный монолит. История C начинается в Англии, с коллегой Алана Тьюринга и программы, которая играла в шашки.
Боже, храни короля
Кристофер Стрейчи был известен как «человек, который писал идеальные программы», как отмечалось в длинном профиле журнала Annals of the History of Computing . Это была репутация, которую он приобрел в вычислительном центре Манчестерского университета в 1951 году. Стрэчи оказался там, работая над школьным компьютером Ferranti Mark I через старый Королевский колледж в Кембридже, по связям с Аланом Тьюрингом.
Стрэчи родился в 1916 году в британской семье с хорошими связями — его дядя Литтон Стрейчи был одним из основателей Bloomsbury Group, а его отец Оливер Стрейчи сыграл важную роль в деятельности союзников по взлому кодов во время обеих мировых войн.
То, что Стрейчи стал признанным экспертом в области программирования и информатики, стало бы неожиданностью для его государственной школы и преподавателей Кембриджского университета.Стрейчи всегда проявлял талант к наукам, но редко применял себя.
Если у него и были надежды на карьеру в области научных исследований, то им нанесла серьезный удар ничем не примечательная результативность на его выпускных экзаменах. Вместо этого Стрейчи провел Вторую мировую войну, работая на британскую фирму по производству электроники, а затем стал школьным учителем, в конечном итоге попав в Харроу, одну из самых престижных государственных школ Лондона.
В 1951 году Стрейчи впервые смог поработать с компьютерами, когда он познакомился с Майком Вудгером в Национальной физической лаборатории Великобритании.Проведя день своих рождественских каникул, знакомясь с Pilot ACE лаборатории, он проводил свободное время в Харроу, выясняя, как научить компьютер играть в шашки. Как сказал Мартин Кэмпбелл-Келли, коллега Стрейчи в последние годы его жизни, «любой, у кого больше опыта или меньше уверенности, остановился бы на таблице квадратов».
Эта первая попытка не увенчалась успехом; у Pilot ACE просто не было места для хранения, необходимого для игры в шашки, но он действительно проиллюстрировал аспект интереса Стрэчи, который сыграл важную роль в разработке языков, которые привели к C.В то время, когда компьютеры ценились главным образом за их способность быстро решать уравнения, Стрейчи больше интересовала их способность выполнять логические задачи (как он позже подтвердил на собрании Ассоциации вычислительной техники в 1952 году).
Позже той же весной он узнал о компьютере Ferranti Mark I, который был установлен в Манчестерском университете, где Алан Тьюринг был помощником директора компьютерной лаборатории. Тьюринг написал руководство для программиста, и Стрэчи достаточно хорошо знал его по совместному пребыванию в Кембридже, чтобы попросить у него экземпляр руководства.
Реклама
В июле 1951 года Стрейчи имел возможность посетить Манчестер и лично обсудить свою программу шашек с Тьюрингом. Достаточно впечатленный, Тьюринг предложил, чтобы в качестве первого шага он написал программу, которая позволила бы Ferranti Mark I моделировать сам себя. Симулятор позволит программистам шаг за шагом увидеть, как компьютер будет выполнять программу. Такая программа «трассировки» выделяла бы те места, где программа вызывала узкие места или работала неэффективно.В то время, когда и память компьютера, и циклы процессора стоили целое состояние, это был важный аспект программирования.
Программа трассировки, которую написал Стрейчи, включала более тысячи инструкций — в то время это была самая длинная программа, которая когда-либо была написана для Ferranti Mark I. Стрейчи запустил ее и запустил после того, как всю ночь потянул, а когда программа завершилась, По словам Кэмпбелл-Келли, он воспроизводил «Боже, храни короля» на динамике компьютера.
Это достижение любителя привлекло внимание лорда Холсбери, управляющего директора Национальной корпорации исследований и разработок, который вскоре нанял Стрэчи, чтобы возглавить усилия правительства по продвижению практического применения быстрых разработок в области информатики, происходящих в британских университетах. .
Именно в этом качестве он узнал о проекте в Кембридже, осуществляемом троицей программистов по имени Дэвид.
Давид и Голиаф Титан
Вычислительный центр
Кембриджского университета имел сильную ориентацию на услуги. Первые компьютеры математической лаборатории, EDSAC и EDSAC 2, были предоставлены исследователям из других университетов, которые писали программы, которые записывались на бумажной ленте и загружались в машину.
В вычислительном центре эти бумажные ленты были прикреплены к бельевой веревке и заклеены одна за другой в рабочее время.Эта линия ожидающих программ стала известна как «очередь заданий», термин, который до сих пор используется для описания гораздо более сложных средств организации вычислительных задач.
На отметке 6:55 воспользуйтесь действием EDSAC «очередь заданий».
Всего через два года после того, как EDSAC 2 был запущен, университет понял, что скоро потребуется гораздо более мощная машина, и для этого им нужно будет купить коммерческий мэйнфрейм. Университет рассматривал и IBM 7090, и Ferranti Atlas, но не мог позволить себе ни один из них.В 1961 году Питер Холл, менеджер подразделения Ferranti, предложил совместно с Кембриджским университетом разработать урезанную версию компьютера Atlas. Кембридж получит прототип, получивший название «Титан», а Ферранти сможет продавать новый компьютер клиентам, которые не могут позволить себе систему Atlas.
Чтобы предоставлять вычислительные услуги остальной части университета, этому новому компьютеру потребуется как операционная система, так и хотя бы один язык программирования высокого уровня.
О расширении языка, разработанного для EDSAC 2, почти не думали. «В начале 1960-х было принято думать:« Мы строим новый компьютер, поэтому нам нужен новый язык программирования »», — Дэвид Хартли. напомнил в подкасте 2017 года. Вместе с Дэвидом Уилером и Дэвидом Бэрроном Хартли будет участвовать в ранней разработке языка программирования для этого нового компьютера.
«Новая операционная система была неизбежна», по словам Хартли, но новый язык программирования — нет.«Мы думали, что это была возможность повеселиться с новым языком, что, оглядываясь назад, было чертовски глупо».
Реклама
Морис Уилкс, курировавший проект «Титан», считал, что в новом языке программирования нет необходимости. Основным оправданием для Titan было предоставление вычислительных услуг остальной части Кембриджского университета, и для этого было бы лучше, если бы машина была запущена и работала как можно быстрее и была оснащена языком, с которым пользователи уже знакомы.
Wilkes требовал анализа доступных языков программирования, прежде чем одобрять предложение по разработке нового языка. «Мы выбрали их очень тщательно, — сказал Хартли, — чтобы решить, что ни один из них не подходит». Примечательно, что рабочая группа оценивала Fortran IV, не консультируясь с пользователями Fortran в Кембридже, которые могли бы объяснить дополнительные функции, включенные в другие разновидности Fortran. Из-за этого Хартли напомнил, что группа была убеждена, что «мы могли бы легко определить и разработать что-то значительно лучшее», прежде чем отметить, что «эта неудача стала очевидной через несколько лет.”
Трио в конечном итоге подготовило статью в июне 1962 года, в которой утверждалось, что новый язык необходим, «и нам это тоже сошло с рук», — заключил Хартли.
Этот новый язык программирования получил название CPL (Кембриджский язык программирования), и к 1963 году работа шла полным ходом. К программистам из Кембриджа присоединились Джон Бакстон и Эрик Никсон из Лондонского университета, а CPL был изменен на Combined. Язык программирования. По мере того, как проект рос, Уилкс решил привлечь Кристофера Стрейчи для наблюдения за ним, и, по словам Кэмпбелл-Келли, вскоре CPL стал означать «язык программирования Кристофера» для тех, кто был с ним связан.
Группа исследователей, работающих над языком, собиралась в Кембридже или в Лондоне, иногда в Лондонском университете, но в других случаях в студии художника в таунхаусе в Кенсингтоне, который Стрейчи делил со своей сестрой. Комната в задней части дома была обставлена викторианскими стульями и подушками на полу, а стены были украшены портретами различных членов Bloomsbury Group, нарисованными одним из родственников Стрейчи. Именно здесь Стрейчи «проводил суд», иногда в халате, и, как Дэвид Бэррон вспоминал несколько лет спустя, «мы доказывали, что мир прав, прежде чем вечером разбегаться по своим домам.”
К тому времени Дэвид Уиллер перешел к другим проектам, оставив команду из пяти человек: Хартли, Бэррон, Бакстон, Никсон и Стрейчи.
Хартли понравилось работать над CPL; «На самом деле это была довольно забавная работа», — вспоминал он. Встречи носили довольно неформальный характер. «Мы очень разгорячились и в конце концов начали кидать друг в друга бумажные дротики [самолетики]».
Группа начала со спецификаций ALGOL 60 с целью написать «идеальный» язык: такой, который был бы практичным для множества пользователей, но также эстетически удовлетворительным и эффективным.
Почти сразу у них возникли некоторые трудности с расстановкой приоритетов, как заметил Дэвид Бэррон о Стрейчи: «Для него было характерно настаивать на незначительных различиях с той же силой, с которой он настаивал на основных моментах». Одна небольшая придирка заключалась в возражении Стрейчи против грамматики утверждений «ЕСЛИ… ТО… ИНАЧЕ». «Я не могу допустить, чтобы мое имя ассоциировалось с определенной рекомендацией использовать заведомо неправильный английский язык», — было его мнение, как позже написал Хартли для Annals of the History of Computing . Стрейчи предпочитал «ИЛИ», что противоречило способу использования «ИЛИ» почти во всех других существующих языках программирования. Тем не менее, его предпочтения возобладали, и справочное руководство по CPL включало «ИЛИ» в том месте, где пользователи ожидали «ИНАЧЕ».
Руководство CPL, конечно же, доступно в Интернете.
Ценное время было также потрачено на разработку способа избежать использования звездочки для обозначения умножения. Здесь эстетические соображения привели к осложнениям, которые задержали реализацию пригодного для использования языка программирования, поскольку пришлось разработать сложные правила, чтобы различать «3a», означающее «3 * a», и «3a» в качестве имени переменной.
Все это время пользователи Кембриджа все больше разочаровывались в отсутствии подходящего языка программирования для нового университетского компьютера Atlas. Спецификации языка были в основном закончены, но компилятора не было. Рабочая группа настолько усложнила CPL, что первые попытки написать компилятор привели к созданию невероятно неэффективного машинного кода.
.