5. Почему язык С++ (почти) совместим с языком C?
6. Почему язык C++ только
7. Перечислите десять особенностей языка C++, отсутствующих в языке C.
8. Какой организации “принадлежат” языки C и C++?
9. Перечислите шесть компонентов стандартной библиотеки языка C++, которые не используются в языке C.
10. Какие компоненты стандартной библиотеки языка C можно использовать в языке C++?
11. Как обеспечить проверку типов аргументов функций в языке C?
12. Какие свойства языка C++, связанные с функциями, отсутствуют в языке C? Назовите по крайней мере три из них. Приведите примеры.
13. Как вызвать функцию, написанную на языке C, в программе, написанной на языке C++?
14. Как вызвать функцию, написанную на языке C++, в программе, написанной на языке C?
15. Какие типы совместимы в языках C и C++? Приведите примеры.
16. Что такое дескриптор структуры?
17. Перечислите двадцать ключевых слов языка C++, которые не являются ключевыми словами языка C.
18. Является ли инструкция int x
; определением в языке C++? А в языке C?
19. В чем заключается приведение в стиле языка С и чем оно опасно?
20. Что собой представляет тип void*
и чем он отличается в языках C и C++?
21. Чем отличаются перечисления в языках C и C++?
22. Что надо сделать в программе на языке C, чтобы избежать проблем, связанных с совпадением широко распространенных имен?
23. Назовите три наиболее широко используемые функции для работы со свободной памятью в языке C.
24. Как выглядит определение в стиле языка С?
25. Чем отличаются оператор ==
и функция strcmp()
для С-строк?
26. Как скопировать С-строки?
27. Как определить длину С-строки?
28. Как скопировать большой массив целых чисел типа int
?
29. Назовите преимущества и недостатки функции printf()
.
30. Почему никогда не следует использовать функцию gets()
? Что следует использовать вместо нее?
31. Как открыть файл для чтения в программе на языке C?
32. В чем заключается разница между константами (const
) в языке C и C++?
33. Почему мы не любим макросы?
34. Как обычно используются макросы?
35. Что такое “страж включения”?
Термины
Упражнения
Для этих упражнений может оказаться полезным скомпилировать все программы с помощью компиляторов и языка C, и языка C++. Если использовать только компилятор языка C++, можно случайно использовать свойства, которых нет в языке C. Если вы используете только компилятор языка C, то ошибки, связанные с типами, могут остаться незамеченными
1. Реализуйте варианты функций strlen()
, strcmp()
и strcpy()
.
2. Завершите пример с интрузивным контейнером List
из раздела 27.9 и протестируйте каждую его функцию.
3. Усовершенствуйте пример с интрузивным контейнером List из раздела 27.9 по своему усмотрению. Предусмотрите перехват и обработку как можно большего количества ошибок. При этом можно изменять детали определений структур, использовать макросы и т.д.
4. Если вы еще на переписали пример с интрузивным контейнером List
из раздела 27.9 на языке C++, сделайте это и протестируйте каждую функцию.
5. Сравните результаты упр. 3 и 4.
6. Измените представление структур Link
и List
из раздела 27.9 без изменения интерфейса пользователя, обеспеченного функциями. Разместите узлы в массивах и предусмотрите члены first
, last
, pre
, и suc
типа int
(индексы массива).
7. Назовите преимущества и недостатки интрузивных контейнеров по сравнению с неинтрузивными контейнерами из стандартной библиотеки языка С++. Составьте списки аргументов за и против этих контейнеров.
8. Какой лексикографический порядок принят на вашем компьютере? Выведите на печать каждый символ вашей клавиатуры и ее целочисленный код; затем выведите на печать символы в порядке, определенном их целочисленными кодами.
9. Используя только средства языка C, включая его стандартную библиотеку, прочитайте последовательность слов из потока stdin
и выведите ее в поток stdout
в лексикографическом порядке. Подсказка: функция сортировки в языке C называется qsort()
; найдите ее описание. В качестве альтернативы вставляйте слова в упорядоченный список по мере его считывания. В стандартной библиотеке языка C списка нет.
10. Составьте список свойств языка C, заимствованных у языков C++ или C with Classes (раздел 27.1).
11. Составьте список свойств языка C, не заимствованных у языка C++.
12. Реализуйте (либо с помощью С-строк, либо с помощью типа int
) таблицу поиска с операциями find(struct table*, const char*)
, insert(struct table*, const char*, int)
и remove(struct table*, const char*)
. Эту таблицу можно представить в виде массива пар структур или пар массивов (const char*[]
и int*
); выбирайте сами. Выберите типы возвращаемых значений для ваших функций. Документируйте ваши проектные решения.