Г. Шилдт - Полный справочник по C++ (1109478), страница 5
Текст из файла (страница 5)
Еще одним примером такого анахронизма является препроцессор. Он играет чрезвычайно важную роль в языке С и очень скромную — в языке С++. Обсуждение свойств, присущих "стилю языка С", в первой части книги позволяет избежать путаницы в остальных главах. Запомните: подмножество С, описанное в части 1, является ядром языка С++ и фунламентом, на котором воздвигнуты сто объектно-ориентированцыс конструкции. Все свойства, описанные злесь, являются неотъемлемой частью языка С++ и могут быть использованы в ваших программах.
Р~йййй' ' Часть 1 содержит мгтеригпы из моей книги С: Тье Ссзпр1еге йв(егепсе (Дасвгеягд1Л !ЩЙЩ Овйоте) (Русский перевод: С Шипдт. Полный справочник по язьжу С. — 1Иа Изд. дам 'Вильямс", г001. — Прим. Ред.). Если язык С ыапересует ввс как сгмсспкятепьный язьж прогргммирсггния, зтг книга окажется дпя вес ценника помощником. Ч тобы понять язык С++, необходимо понять мотивы его создания, идеи, положенные в его основу.
и своиства, которые оп унаследовал от своих предшественников. Таким образом. история языка С++ начинается с языка С. В главе прелсгавлсн обзор языка С, а закжс описана история его возникновения, способы прил1енения и основные принципы. Поскольку язык С++ создан на основе языка С, эту главу можно считазь описанием предыстории языка С++. Многое из того, что сделало язык С++ таким популярным, уходит корнями в язык С. ~~-""-'"-' Происхождение и история языка С Язык С был изобретен и впервые реализован Деннисом Ритчи (Оеппй Кйс!не) на компьютере ОЕС РОР--11 под >правлением операционной системы П!Ч!Х.
Язык С появился в результате развития языка под названием ВСРП. В свою очередь, этот язык был разрабозан Мартином Ричардсом (Магйп К!с!загс) под влиянием другого языка, имевшего название В, автором которого был Кен Томпсон (Кеп Тотрзоп). Итак, в 1970-х годах развитие языка В привело к появлению языка С.
Многие годы фактическим станлартом языка С была версия для операционной системы (ЛЧ)Х. Впервые она была описана в книге Брайана Кернигана (Впап Кегп(- 8ап) и Денниса Ритчи 7ле С Рпуиетщ Еащиале в 1978 году. (Русский перевод: Керниган Б., Ритчи Д. Язык программирования С. — СПб: Невский диалект, 2001.
— Прим. ред.). Летом 1983 года был создан комитет Американского института национальных стандартов (Атпепсап )Ча!!опа! 8!апг)апЬ )пайбде — А)Ч81), целью которого была разработка стандарта языка С. Работа комитета неожиданно растянулась на шесть лет. В итоге стандарт А!чу!С был олобрен в декабре 1989 гела и стал распространяться в начале 1990-го. Этот стандарт был также олобрен Организацией международных стандартов (1пгегпабопа! 8!апг!ап)з Огйап(глйоп — 180), получив название АФЯ/ЮО огалг!апу С В 1995 году была одобрена Первая поправка, которая помимо всего прочего добавила несколько новых библиотечных функций.
В 1989 году стандарт языка С вместе с Первой поправкой стали базовым докумеюлом для станларза языка С++„в котором было вьшслено псдмяожеояел С Версию языка С, определенную стандартом 1989 года, обычно называют С89. После 1989 года в центре внимания программистов оказался язык С++, Развитие этого языка на протяжении 1990-х годов завсршилссь одобрением стандарта в конце 1998 гола.
Между тем работа над языком С продолжалась. нс вызывая излишнего шума. В итоге в !999 году появился новый стандарз. языка С, который обычно называют С99. В целом стандарт С99 сохранил практически все свойства стандарта С89, не изменив основных аспектов языка. Таким образом, язык С, описанный стандартом С99, практически совпадае~ с языком, соответствуюшим стандарту С89.
Комитет по разработке сганларта С99 сосредоточился на двух вопросах: включении в язык ~~сскольких математических библиотек и развитии некоторых специфических и весьма сложных свойств, например, массивов переменной длины и квалификатора указателей хевсхьсс. В стандарт С99 вошли также некоторыс своиства, позаимствованные из языка С++, например, однострочные комментарии.
Поскольку разработка станларта языка С++ завершилась до создания стандарта С99, ни слно из новшеств языка С нс вошло в стандарт С++. ~® Сравнение стандартов С89 и С99 Несмотря на то что все новшества, внесенные в стандарт С99, весьма важны с теоретической точки зрения, они имели мало практических последствий, так как до сих пор нет ни одного широко распространенного компилятора, который Часть 1.
Основы языка С++: подмножество С подлсрживал бы стандар~ С99. Большинство программистов до сих пор считают языком С ого вариант., опрсдслснный стандартом С89. Имспно ого реализуют вес основныс компиляторы. Более того, подмножество С языка С++ описывается именно стандартом С89. Хотя некоторые новшества, включенные в станларт С99, в конце концов обязательно будут учтены слсдуюшим станлартом языка С++, пока они несовместимы с языком С++. Поскольку подмножество С языка С++ соответствует стандарту С89, и эту версию изучают большинство программистов, именно сс мы рассмотрим в час~и!.
Итак, используя название С, мы будем иметь в виду версию языка, определенную стандартом С89. Однако мы будем отмечать важные различия между версиями С89 и С99, поскольку это улучшит совместимость языков С и С++, '.'2~ С вЂ” язык среднего уровня Язык С часто называют языком среднею уровня. Это нс означает, что оп монсе эффективен, более нсулобсн в использовании или манас продуман, чем языки высокого уровня, такие как Ваяс или Равса1. Отсюда также нс следует, что он запуган, как язык ассемблера (и порождает связанныс с этим проблемы). Это выраженно означает лишь, что язык С обьсдиняст лучшис свойства языков высокого уровня, возможности управления и гибкость языка ассемблера.
В табл. 1.1 показано место языка С орели других языков программирования. Таблица 1.1. Место языка С среди остальных языков програьвеированив Ада Мод и1а-2 Равса1 СОВО~ РОВТНАЫ ВАВ1С Зава Св С++ С Роли Маао-аввегпыег АвввгпЫег Высший уровень Средний уровень Низший уровень Глава 1. Обзор языка С Будучи языком среднсго уровня, язык С позволяет осушсствлять манипуляции с битами, байтами и адресами — основными элементами, с которыми работают функции операционной системы. Несмотря на это, програмллы, написанные на языке С, можно выполнять на разных компьютерах.
Это свойство программ называется машинанезаеисимастью (ропаЫ1йу). Например, если программу, написанную для операционной системы 0)л)1Х, можно легко преобразовать, чтобы она работала на платформе лт)одолев, то говорят, что такая программа является машинанезависимаи (роггаЫс). Вес языки высокого уровня используют концепцию типов данных, Тин данных (да1а гуре) определяет множсшво значений, которые может принимать переменная, а также множество операций, которые нал нсй можно выполлшть. К основныл1 типам данных относязся полос число, символ и дсйсзвитсльнос число.
Несмотря на то что в языке С сушсствуст пять встроенных типов данных, он нс является строго типнзи- рованным языком, как языки Разса1 и Ада. В языке С разрешены практически все преобразования типов. Например, в одном и том же выражении можно свободно использовать псрсменныс символыюго и целочисленного ~илов.
В отличие от языков высокого уровня, язык С практически нс проверяет ошибки, возникающие на этапе выполнения программ. Например, не осуществляется проверка возможного выхода индекса массива за пределы лопустимого диапазона. Предотвращение ошибок ~акого рода возлагается на программиста. Кроме того, язык С нс требует строгой совместимости типов параметров и аргументов функций. Как известно, языки высокого уровня обычно требуют, чтобы тип аргумента ~очно совпадал с типом соответствуюшсго параметра.
Однако в языке С такого условия нет. Он позволяет использовать аргумент любого типа, если его можно разумным образом преобразовать в тип параметра. Кроме того язык С предусматривает средства для автоматического преобразования ~илов. Особенность языка С заключается в том, по он позволяет непосредственно манипулировать битами, байтами, машинными словами и указателями.
Это делает его очень удобным для системного программирования, в котором эти операции широко распространены. Другой важный аспект языка состоит в том, что в нем предусмотрено очень небольшое количество ключевых слов, которые можно использовать для конструирования выражений. Например, стандарт С89 содержит лишь 32 ключевых слова, а стандарт С99 добавил к ним всего 5 слов.