• В языке С используются структуры, глобальные функции и указатели на функции (раздел 27.2.3).
• Шаблоны и подставляемые функции
• В языке С используются макросы (раздел 27.8).
• Исключения
• В языке С используются коды ошибок, ошибочные возвращаемые значения и т.п.
• Перегрузка функций
• В языке С каждой функции дается отдельное имя.
• Операторы new/delete
• В языке С используются функции malloc/free
и отдельный код для инициализации и удаления.
• Ссылки
• В языке С используются указатели.
• Ключевое слово const
в константных выражениях
• В языке С используются макросы.
• Объявления в инструкциях for
и объявления как инструкции
• В языке С все объявления должны быть расположены в начале блока, а для каждого набора определений начинается новый блок.
• Тип bool
• В языке С используется тип int
.
• Операторы static_cast
, reinterpret_cast
и const_cast
• В языке С используются приведения вида (int)a
, а не static
.
• // комментарии
• В языке С используются комментарии /* ... */
Остальная часть этой главы посвящена объяснению того, как писать полезные программы без помощи этих свойств. Наши основные советы по использованию языка С++ сводятся к следующему.
• Имитируйте стили программирования, для которых разработаны свойства языка С++, чтобы поддерживать возможности, предусмотренные языком C.
• Когда пишете программу на языке C, считайте его подмножеством языка C++.
• Используйте предупреждения компилятора для проверки аргументов функций.
• Контролируйте стиль программирования на соответствие стандартам, когда пишете большие программы (см. раздел 27.2.2).
Многие детали, касающиеся несовместимости языков С и С++, устарели и носят скорее технический характер. Однако, для того чтобы читать и писать на языке С, вы не обязаны помнить об этом.
• Компилятор сам напомнит вам, если вы станете использовать средства языка С, которых нет в языке C.
• Если вы следуете правилам, перечисленным выше, то вряд ли столкнетесь с чем-либо таким, что в языке С имеет другой смысл по сравнению с языком С++.
В отсутствие всех возможностей языка С++ некоторые средства в языке С приобретают особое значение.
• Массивы и указатели.
• Макросы.
• Оператор typedef
.
• Оператор sizeof
.
• Операторы приведения типов.
В этой главе будет приведено несколько примеров использования таких средств.
//
, унаследованные от его предшественника, языка BCPL, когда мне надоело печатать комментарии вида /* ... */
. Комментарии //
приняты в большинстве диалектов языка, включая версию C99, поэтому их можно использовать совершенно безопасно. В наших примерах мы будем использовать комментарии вида /* ... */
исключительно для того, чтобы показать, что мы пишем программу на языке C. В языке C99 реализованы некоторые возможности языка C++ (а также некоторые возможности, несовместимые с языком С++), но мы будем придерживаться версии C89, поскольку она используется более широко.
27.1.3. Стандартная библиотека языка С
• Класс vector
.
• Класс map
.
• Класс set
.
• Класс string
.
• Алгоритмы библиотеки STL: например, sort
, find
и copy
.
• Потоки ввода-вывода iostream
.
• Класс regex
.
Из-за этого библиотеки языка С часто основаны на массивах, указателях и функциях. К основной части стандартной библиотеки языка С относятся следующие заголовочные файлы.
•
. Общие утилиты (например, malloc
и free
; см. раздел 27.4).
•
. Стандартный механизм ввода-вывода; см. раздел 27.6.
•
. Манипуляции со строками и памятью в стиле языка C; см. раздел 27.5.
•
. Стандартные математические функции для операций над числами с плавающей точкой; см. раздел 24.8.
•
. Коды ошибок математических функций из заголовочного файла
; см. раздел 24.8.
•
. Размеры целочисленных типов; см. раздел 24.2.
•
. Функции даты и времени; см. раздел 26.6.1.
•
. Условия для отладки (debug assertions); см. раздел 27.9.
•
. Классификация символов; см. раздел 11.6.
•
. Булевы макросы.
Полное описание стандартной библиотеки языка С можно найти в соответствующем учебнике, например в книге K&R. Все эти библиотеки (и заголовочные файлы) также доступны и в языке С++.
27.2. Функции
В языке C есть несколько особенностей при работе с функциями.
• Может существовать только одна функция с заданным именем.