
Сабуров С.В. - Язык программирования C и C++ - 2006
.pdfСергей Сабуров
Языки программирования
C и C++
УДК 681.3 ББК 32.973.26 018.2
С418
Сабуров С.В.
С418 Языки программирования C и C++. М.: Бук пресс, 2006. 647 с. (Справочное руководство пользователя персонального компьютера).
ISBN 5 8321 0138 2
В книге («неофициальное» руководство пользователя) полностью описаны языки программирования C и С++. Уделено особое внимание описанию языка C++ и интегрированных средах разработки программ TURBO C++ и Visual C. Язык программирования C++ — это C, расширенный введением классов, inline функций, перегруженных операций, перегруженных имен функций, константных типов, ссылок, операций управления свободной памятью, проверки параметров функций. Этот язык, сохранив средства ставшего общепризнанным стандартом для написания системных и прикладных программ языка С (процедурно ориентированный язык), ввел в практику программирования возможности нового технологического подхода к разработке программного обеспечения, получившего название «объектно ориентированное программирование».
УДК 681.3 ББК 32.973.26 018.2
|
© Сабуров С.В., составление, 2006 |
|
© Бук пресс, 2006 |
|
© Издательско торговая компания |
ISBN 5 8321 0139 2 |
МиК, оформление,2006 |

Содержание
Содержание
Язык программирования Си |
|
Введение ........................................................................................................................................................... |
3 |
Множества символов ..................................................................................................................................... |
4 |
Константы ..................................................................................................................................................... |
10 |
Идентификаторы .......................................................................................................................................... |
14 |
Ключевые слова ............................................................................................................................................ |
15 |
Комментарии ................................................................................................................................................ |
16 |
Лексемы ......................................................................................................................................................... |
17 |
Исходная программа .................................................................................................................................... |
18 |
Исходные файлы .......................................................................................................................................... |
19 |
Выполнение программ ................................................................................................................................. |
21 |
«Время жизни» и «Видимость» .................................................................................................................... |
22 |
Классы имен ................................................................................................................................................. |
24 |
Объявления .................................................................................................................................................... |
27 |
Спецификаторы типов ................................................................................................................................. |
28 |
Область значений величин .......................................................................................................................... |
29 |
Деклараторы .................................................................................................................................................. |
30 |
Объявления переменной .............................................................................................................................. |
34 |
Классы памяти .............................................................................................................................................. |
45 |
Инициализация ............................................................................................................................................ |
51 |
Объявления типов ........................................................................................................................................ |
54 |
Имена типов .................................................................................................................................................. |
55 |
Выражения и присваивания ......................................................................................................................... |
56 |
Операнды ...................................................................................................................................................... |
57 |
Операции ....................................................................................................................................................... |
63 |
Операции присваивания .............................................................................................................................. |
72 |
Старшинство и порядок выполнения ......................................................................................................... |
75 |
Побочные эффекты ...................................................................................................................................... |
75 |
Преобразования типов ................................................................................................................................. |
76 |
Операторы ...................................................................................................................................................... |
80 |
Функции ......................................................................................................................................................... |
90 |
Язык программирования С++ |
|
Введение ......................................................................................................................................................... |
98 |
Лексика ........................................................................................................................................................ |
101 |
643

Содержание
Синтаксис .................................................................................................................................................... |
106 |
Область видимости ...................................................................................................................................... |
106 |
Определения ................................................................................................................................................ |
108 |
Компоновка ................................................................................................................................................. |
108 |
Классы памяти ............................................................................................................................................. |
108 |
Основные типы ............................................................................................................................................ |
109 |
Производные типы ...................................................................................................................................... |
110 |
Объекты и LVALUE (адреса) ..................................................................................................................... |
110 |
Символы и целые ......................................................................................................................................... |
111 |
Преобразования ........................................................................................................................................... |
112 |
Выражения и операции ............................................................................................................................... |
114 |
Описания ..................................................................................................................................................... |
127 |
Спецификаторы класса памяти .................................................................................................................. |
128 |
Описатели ..................................................................................................................................................... |
131 |
Описания классов ........................................................................................................................................ |
137 |
Инициализация ........................................................................................................................................... |
150 |
Перегруженные имена функций ................................................................................................................. |
157 |
Описание перечисления .............................................................................................................................. |
158 |
Описание Asм ............................................................................................................................................... |
159 |
Операторы ................................................................................................................................................... |
159 |
Внешние определения ................................................................................................................................ |
165 |
Командные строки компилятора ............................................................................................................... |
167 |
Обзор типов ................................................................................................................................................. |
170 |
Соображения мобильности ........................................................................................................................ |
174 |
Свободная память ....................................................................................................................................... |
175 |
Справочник по работе с DOS |
|
Управление памятью в DOS ....................................................................................................................... |
177 |
Модели памяти ........................................................................................................................................... |
182 |
Программирование со смешанными моделями и модификаторы адресации ........................................ |
185 |
Оверлеи (VROOMM) ................................................................................................................................... |
192 |
Математические операции ......................................................................................................................... |
202 |
Видео функции ........................................................................................................................................... |
211 |
Библиотеки DOS ......................................................................................................................................... |
236 |
Отладчик Turbo Debugger |
|
Назначение отладчика ................................................................................................................................. |
245 |
Установка и настройка Turbo Debugger ..................................................................................................... |
246 |
Выполнение программ с отладчиком ........................................................................................................ |
255 |
Интерфейс отладчика ................................................................................................................................. |
269 |
644

|
Содержание |
Специальные средства Turbo Debugger ..................................................................................................... |
274 |
Точки останова ........................................................................................................................................... |
281 |
Окно Log ...................................................................................................................................................... |
291 |
Окно Watches ............................................................................................................................................... |
293 |
Окно Variables ............................................................................................................................................. |
295 |
Окна Inspector ............................................................................................................................................. |
297 |
Окно Stack ................................................................................................................................................... |
299 |
Вычисление выражений ............................................................................................................................. |
301 |
Отладка на уровне ассемблера ................................................................................................................... |
308 |
Отладка в Windows ...................................................................................................................................... |
318 |
Трассировка исключительных ситуаций операционной системы .......................................................... |
325 |
Отладка объектно ориентированных программ ....................................................................................... |
327 |
Отладка резидентных программ и драйверов устройств .......................................................................... |
331 |
Турбо Си ++ |
|
Интегрированная среда разработки ........................................................................................................... |
342 |
Строка меню и меню ................................................................................................................................... |
342 |
Окна TURBO C++ ...................................................................................................................................... |
343 |
Работа с экранным меню ............................................................................................................................ |
344 |
Структура файла, типы данных и операторов ввода вывода .................................................................... |
351 |
Арифметические, логические операции и операции отношения и присваивания ................................. |
355 |
Логическая организация программы и простейшее использование функций ........................................ |
359 |
Логическая организация простой программы ........................................................................................... |
360 |
Использование констант различных типов ............................................................................................... |
360 |
Управляющие структуры ............................................................................................................................. |
362 |
Приемы объявления и обращения к массивам, использование функций |
|
и директивы define при работе с массивами .............................................................................................. |
364 |
Трюки программирования |
|
Правило «право лево» ................................................................................................................................. |
367 |
STLport 4.0 .................................................................................................................................................. |
368 |
Новый язык программирования от Microsoft: C# ................................................................................... |
370 |
C++ Builder ................................................................................................................................................ |
372 |
Применение «умных» указателей ............................................................................................................. |
376 |
Рассуждения на тему «Умных» указателей ................................................................................................. |
382 |
Виртуальные деструкторы ......................................................................................................................... |
389 |
Запись структур данных в двоичные файлы ............................................................................................ |
392 |
Оператор безусловного перехода goto ...................................................................................................... |
399 |
Виртуальный конструктор ........................................................................................................................ |
403 |
Чтение исходных текстов ............................................................................................................................ |
410 |
645

Содержание
Функция gets() ............................................................................................................................................ |
412 |
Свойства ..................................................................................................................................................... |
414 |
Комментарии ............................................................................................................................................. |
418 |
Веб программирование ............................................................................................................................... |
424 |
Ошибки работы с памятью ......................................................................................................................... |
429 |
Создание графиков с помощью ploticus ................................................................................................... |
432 |
Автоматизация и моторизация приложения .............................................................................................. |
435 |
Обзор C/C++ компиляторов EMX и Watcom ........................................................................................... |
456 |
Использование директивы #import ............................................................................................................ |
462 |
Создание системных ловушек Windows на Borland C++ Builder 5 ........................................................... |
480 |
Тонкости и хитрости в вопросах и ответах ..................................................................................................... |
|
Приложения |
|
Средства для разработчиков ....................................................................................................................... |
635 |
Список использованной литературы ......................................................................................................... |
640 |
646

Язык программирования Си
Язык программирования Си
Введение
Си — это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Указанные преимущества Си обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование Си в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на Си, сравнимы по скорости с программами, написанными на языке ассемблера. При этом они имеют лучшую наглядность и их более просто сопровождать.
Си сочетает эффективность и мощность в относительно малом по размеру языке. Хотя Си не содержит встроенных компонент языка, выполняющих ввод вывод, распределение памяти, манипуляций с экраном или управление процессами, тем не менее, системное окружение Си располагает библиотекой объектных модулей, в которой реализованы подобные функции. Библиотека поддерживает многие из функций, которые требуются.
Это решение позволяет изолировать языковые особенности от специфики процессора, на котором выполняется результирующая программа. Строгое определение языка делает его независимым от любых деталей операционной системы или машины. В то же время программисты могут добавить в библиотеку специфические системные программы, чтобы более эффективно использовать конкретной особенности машины.
Перечислим некоторые существенные особенности языка Си:
●Си обеспечивает полный набор операторов структурного программирования.
●Си предлагает необычно большой набор операций. Многие операции Си соответствуют машинным командам и поэтому допускают прямую трансляцию
3

Язык программирования Си
в машинный код. Разнообразие операций позволяет выбирать их различные наборы для минимизации результирующего кода.
●Си поддерживает указатели на переменные и функции. Указатель на объект программы соответствует машинному адресу этого объекта.
Посредством разумного использования указателей можно создавать эффективно выполняемые программы, так как указатели позволяют ссылаться на объекты тем же самым путем, как это делает машина. Си поддерживает арифметику указателей, и тем самым позволяет осуществлять непосредственный доступ и манипуляции с адресами памяти.
В своем составе Си содержит препроцессор, который обрабатывает текстовые файлы перед компиляцией. Среди его наиболее полезных приложений при написании программ на Си являются: определение программных констант, замена вызовов функций аналогичными, но более быстрыми макросами, условная компиляция. Препроцессор не ограничен процессированием только исходных текстовых файлов Си, он может быть использован для любого текстового файла.
Си — гибкий язык, позволяющий принимать в конкретных ситуациях самые разные решения. Тем не менее, Си налагает незначительные ограничения в таких, например, действиях, как преобразование типов. Во многих случаях это является достоинством, однако программисты должны хорошо знать язык, чтобы понимать, как будут выполняться их программы.
Множества символов
В программах на Си используется два множества символов: множество символов Си и множество представимых символов. Множество символов Си содержит буквы, цифры и знаки пунктуации, которые имеют определенное значение для компилятора Си. Программы на Си строятся путем комбинирования в осмысленные конструкции символов из множества Си.
Множество символов Си является подмножеством множества представимых символов. Множество представимых символов состоит из всех букв, цифр и символов, которые
4

Язык программирования Си
пользователь может представить графически как отдельный символ. Мощность множества представимых символов зависит от типа терминала, который используется.
Программа на Си может содержать только символы из множества символов Си, за исключением строковых литералов, символьных констант и комментариев, где может быть использован любой представимый символ. Каждый символ из множества символов Си имеет вполне определенный смысл для компилятора Си. Компилятор выдает сообщение об ошибке, когда он встречает неверно использованные символы или символы, не принадлежащие множеству Си.
Буквы и цифры
Множество символов Си включает большие и малые буквы из английского алфавита и 10 десятичных арабских цифр:
● большие английские буквы:
A B C D E F G H I J K L M N O P Q R T U V W X Y Z
● малые английские буквы:
a b c d e f g h i j k l m n o p q r t u v w x y z
● десятичные цифры:
0 1 2 3 4 5 6 7 8 9
Буквы и цифры используются при формировании констант, идентификаторов и ключевых слов. Все эти конструкции описаны ниже.
Компилятор Си рассматривает одну и ту же малую и большую буквы как отличные символы. Если в данной записи использованы малые буквы, то замена малой буквы a на большую букву A сделает отличной данную запись от предшествующей.
Пробельные символы
Пробел, табуляция, перевод строки, возврат каретки, новая страница, вертикальная табуляция и новая строка — это символы, называемые пробельными, поскольку они имеют то же самое назначение, как и пробелы между словами и строками на печатной странице. Эти символы разделяют объекты, определенные пользователем, такие, как константы и идентификаторы, от других объектов программы.
5

Язык программирования Си
Символ CONTROL Z рассматривается как индикатор конца файла. Компилятор игнорирует любой текст, следующий за символом CONTROL Z.
Компилятор Си игнорирует пробельные символы, если они не используются как разделители или как компоненты константы символа или строковых литералов. Это нужно иметь в виду, чтобы дополнительно использовать пробельные символы для повышения наглядности программы (например, для просмотра редактором текстов).
Знаки пунктуации и специальные символы
Знаки пунктуации и специальные символы из множества символов Си используются для различных целей, от организации текста программы до определения заданий, которые будут выполнены компилятором или откомпилированной программой.
Эти символы имеют специальный смысл для компилятора Си. Их использование в языке Си описывается в дальнейшем содержании руководства. Знаки пунктуации из множества представимых символов, которые не представлены в данном списке, могут быть использованы только в строковых литералах, константах символах и комментариях.
ESC!последовательности
ESC последовательности — это специальные символьные комбинации, которые представляют пробельные символы и не графические символы в строках и символьных константах.
Их типичное использование связано со спецификацией таких действий, как возврат каретки и табуляция, а также для задания литеральных представлений символов, таких как символ двойная кавычка. ESC последовательность состоит из наклонной черты влево, за которой следует буква, знаки пунктуации, «'», «"», «\» или комбинация цифр.
Если наклонная черта влево предшествует символу, не включенному в этот список, то наклонная черта влево игнорируется, а символ представляется как литеральный. Например, изображение \c представляет символ "c" в литеральной строке или константе символе.
Последовательности \ddd и \xdd позволяют задать любой символ в ASCII (Американский стандартный код
6