Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
• Простота перехода.
• Совместимость.
Многие свойства, оказавшиеся несовместимыми с языком С, объясняются тем, что в языке С++ существует более строгая проверка типов.
Примером программы, являющейся допустимой на языке С, но не на языке С++, является программа, в которой ключевые слова из языка С++ используются в качестве идентификаторов (раздел 27.3.2).
Примеры, в которых семантика конструкции, допустимой в обоих языках, отличается в них, найти труднее, но все же они существуют.
Строковый литерал, такой как
Информация, касающаяся совместимости и различий между языками, не так интересна. В языке С нет никаких изощренных методов программирования, которые стоило бы изучать специально. Вам может понравиться вывод данных с помощью функции
Большинство программистов, работающих на языке С++, рано или поздно так или иначе сталкиваются с программами, написанными на языке С. Аналогично, программисты, создающие программы на языке С, часто вынуждены работать с программами, написанными на языке С++. Большинство из того, что мы описываем в этой главе, уже знакомо программистам, работающим на языке С, но некоторые из этих сведений могут быть отнесены к уровню экспертов. Причина проста: не все имеют одинаковое представление об уровне экспертов, поэтому мы описываем то, что часто встречается в реальных программах. Рассуждения о вопросах совместимости может быть дешевым способом добиться незаслуженной репутации “эксперта по языку С”. Однако следует помнить: реальный опыт достигается благодаря практическому использованию языка (в данном случае языка С), а не изучению эзотерических правил языка (как это излагается в разделах, посвященных совместимости).
Библиография
ISO/IEC 9899:1999. Programming Languages — C. В этой книге описан язык C99; большинство компиляторов реализует язык C89 (часто с некоторыми расширениями).
ISO/IEC 14882:2003-27-01 (2-е издание). Programming Languages — C++. Эта книга написана с точки зрения программиста, идентична версии 1997 года.
Kernighan, Brian W., and Dennis M. Ritchie. The C Programming Language. Addison-Wesley, 1988. ISBN 0131103628.
Stroustrup, Bjarne. “Learning Standard C++ as a New Language”. C/C++ Users Journal,May 1999.
Stroustrup, Bjarne. “C and C++: Siblings”; “C and C++: A Case for Compatibility”; and “C and C++: Case Studies in Compatibility”. The C/C++ Users Journal, July, Aug., and Sept. 2002.
Статьи Страуструпа легко найти на его домашней странице.
27.1.2. Свойства языка С++, которых нет
С точки зрения языка C++ в языке C (т.е. в версии C89) нет многих свойств.
• Классы и функции-члены.
• В языке С используются структуры и глобальные функции.
• Производные классы и виртуальные функции
• В языке С используются структуры, глобальные функции и указатели на функции (раздел 27.2.3).
• Шаблоны и подставляемые функции
• В языке С используются макросы (раздел 27.8).
• Исключения
• В языке С используются коды ошибок, ошибочные возвращаемые значения и т.п.
• Перегрузка функций
• В языке С каждой функции дается отдельное имя.
• Операторы
• В языке С используются функции
• Ссылки
• В языке С используются указатели.
• Ключевое слово
• В языке С используются макросы.
• Объявления в инструкциях
• В языке С все объявления должны быть расположены в начале блока, а для каждого набора определений начинается новый блок.
• Тип
• В языке С используется тип
• Операторы
• В языке С используются приведения вида
• // комментарии
• В языке С используются комментарии
Остальная часть этой главы посвящена объяснению того, как писать полезные программы без помощи этих свойств. Наши основные советы по использованию языка С++ сводятся к следующему.
• Имитируйте стили программирования, для которых разработаны свойства языка С++, чтобы поддерживать возможности, предусмотренные языком C.
• Когда пишете программу на языке C, считайте его подмножеством языка C++.
• Используйте предупреждения компилятора для проверки аргументов функций.
• Контролируйте стиль программирования на соответствие стандартам, когда пишете большие программы (см. раздел 27.2.2).
Многие детали, касающиеся несовместимости языков С и С++, устарели и носят скорее технический характер. Однако, для того чтобы читать и писать на языке С, вы не обязаны помнить об этом.
• Компилятор сам напомнит вам, если вы станете использовать средства языка С, которых нет в языке C.
• Если вы следуете правилам, перечисленным выше, то вряд ли столкнетесь с чем-либо таким, что в языке С имеет другой смысл по сравнению с языком С++.
В отсутствие всех возможностей языка С++ некоторые средства в языке С приобретают особое значение.