Бьерн Страуструп - Язык программирования С++. Вступление, глава 1
Страница 8. Сравнение языков С и С


 

                        Сравнение языков С++ и С


    Выбор С в качестве базового языка для С++ объясняется следующими его
достоинствами:

(1) универсальность, краткость и относительно низкий уровень;
(2) адекватность большинству задач системного программирования;
(3) он идет в любой системе и на любой машине;
(4) полностью подходит для программной среды UNIX.

    В С существуют свои проблемы, но в языке, разрабатываемом "с нуля" они
появились бы тоже, а проблемы С, по крайней мере, хорошо известны. Более
важно то, что ориентация на С позволила использовать язык "С с классами"
как полезный (хотя и не очень удобный) инструмент в течение первых месяцев
раздумий о введении в С классов в стиле Симулы.

    С++ стал использоваться шире, но по мере роста его возможностей,
выходящих за пределы С, вновь и вновь возникала проблема совместимости.
Ясно, что отказавшись от части наследства С, можно избежать некоторых
проблем (см., например, [15]). Это не было сделано по следующим причинам:

    (1) существуют миллионы строк программ на С, которые можно улучшить с
помощью С++, но при условии, что полной переписи их на язык С++ не
потребуется;

    (2) существуют миллионы строк библиотечных функций и служебных
программ на С, которые можно было бы использовать в С++ при условиях
совместимости обоих языков на стадии связывания и их большого
синтаксического сходства;

    (3) существуют сотни тысяч программистов, знающих С; им достаточно
овладеть только новыми средствами С++ и не надо изучать основ языка;

    (4) поскольку С и С++ будут использоваться одними и теми же людьми на
одних и тех же системах многие годы, различия между языками должны быть
либо минимальными, либо максимальными, чтобы свести к минимуму количество
ошибок и недоразумений.  Описание С++ было переработано так, чтобы
гарантировать, что любая допустимая в обоих языках конструкция означала в
них одно и то же.

    Язык С сам развивался в последние несколько лет, что отчасти было
связано с разработкой С++ [14]. Стандарт ANSI для С [27] содержит,
например, синтаксис описания функций, позаимствованный из языка "С с
классами". Происходит взаимное заимствование, например, тип указателя
void* был придуман для ANSI С, а впервые реализован в С++. Как было
обещано в первом издании этой книги, описание С++ было доработано, чтобы
исключить неоправданные расхождения.  Теперь С++ более совместим с языком
С, чем это было вначале ($$R.18).  В идеале С++ должен максимально
приближаться к ANSI C, но не более [9].  Стопроцентной совместимости
никогда не было и не будет, поскольку это нарушит надежность типов и
согласованность использования встроенных и пользовательских типов, а эти
свойства всегда были одними из главных для С++.

    Для изучения С++ не обязательно знать С. Программирование на С
способствует усвоению приемов и даже трюков, которые при программировании
на С++ становятся просто ненужными. Например, явное преобразование типа
(приведение) , в С++ нужно гораздо реже, чем в С (см.  "Замечания для
программистов на С" ниже). Тем не менее, хорошие программы на языке С по
сути являются программами на С++. Например, все программы из классического
описания С [8] являются программами на С++. В процессе изучения С++ будет
полезен опыт работы с любым языком со статическими типами.

 
« Предыдущая статья   Следующая статья »