Санкт-Петербург: БХВ-Петербург, 2014. — 416 с. — ISBN 978-5-9775-0936-7.
Подробно рассмотрены процедурные возможности языков программирования C/C++. Изложены основные принципы строения программы на языке C/C++: раздельная компиляция, функциональная декомпозиция, блоки кода. Описаны синтаксические конструкции языка и показана специфика их использования. Подробно излагаются понятия, связанные с представлением данных: виды данных, их представление в тексте программы, размещение в памяти, время существования и области видимости. Описано назначение и принцип работы препроцессора. Детально рассмотрены указатели и массивы, а также их взаимосвязь в языке C/C++. Приведена сравнительная характеристика ссылок C++ и указателей. Обсуждаются сложные программные элементы. Рассмотрены агрегатные пользовательские типы данных языка C: структуры, объединения.
ВведениеПредисловие
Особенности изложения
Благодарности
Общие принципы процедурного программированиясовременном программировании в целом
Историческая справка
Этапы создания программного продукта
Памятка программисту
Критерии хорошего программного продукта
Структура программы
Разбиение на файлы (модульность) и связанные с этим понятия C/C++
Функциональная декомпозиция и связанные с ней понятия
Блоки кода
Оформление текста программы. Комментарии и отступы
Базовые понятия C/C++Ключевые слова
Идентификаторы (имена)
Понятия
lvalue и
rvalueОператоры
Арифметические операторы
Операторы присваивания
Побитовые операторы
Логические операторы и операторы отношения
Тернарный оператор
?:Оператор
","ДанныеВиды данных
Константы (литералы)
Целые литералы
Литералы с плавающей точкой
Символьные литералы
Строковые литералы
Перечисление
enumПеременные
Что такое тип переменной
Фундаментальные (базовые, встроенные) типы C/C++
Оператор
sizeof и размеры переменных
Знаковость переменной
Приведение типов
Тип
wchar_tТип
bool и
BOOLПонятия объявления и определения
Объявление переменной
Способы использования переменных и типы компоновки
Безопасная сборка проекта (
type-safe linkage)
Размещение и время существования переменных
Ключевое слово
staticОбласть видимости переменной (
scope)
Скрытие (замещение) имени переменной
Пространства имен –
namespaceИнициализация переменных
Явная инициализация переменных (программистом)
Неявная инициализация переменных (компилятором)
Модификаторы
const и
volatileКлючевое слово
constКлючевое слово
volatileИнструкции (statements) C/C++Общая информация об инструкциях
Инструкции выбора (условия)
Инструкции
if,
if... elseПереключатель –
switchИнструкции цикла
Инструкция
whileИнструкция
do... whileИнструкция
forИнструкции безусловного перехода:
break,
continue,
return,
gotoПрепроцессор. Заголовочные файлыДирективы препроцессора
Директива
#defineИспользование директивы
#defineПредопределенные макросы
Диагностический макрос
assertРекомендации
Директива
#undefДирективы
#ifdef,
#ifndef,
#else u
#endifДирективы
#if,
#elifi,
#else,
#endif. Оператор препроцессора
definedДиректива
#include. Заголовочные файлы
Концепция разделения на интерфейс и реализацию. Механизм подключения заголовочных файлов
Формы директивы
#includeВложенные включения заголовочных файлов (стратегии включения)
Предкомпиляция заголовочных файлов
Заголовочные файлы стандартной библиотеки
Защита от повторных включений заголовочных файлов
Что может быть в заголовочных файлах и чего там быть не должно
Директива
#pragmaДиректива
#errorУказатели и массивыУказатели
Объявление и определение переменной-указателя
Инициализация указателя и оператор получения адреса объекта – &
Получение значения объекта посредством указателя: оператор разыменования – *
Арифметика указателей
Указатель типа
void*Нулевой указатель (
NULL-pointer)
Указатель на указатель
Указатель и ключевые слова
const и
volatileЯвное преобразование типа указателя
Массивы
Объявление массива
Обращение к элементу массива – оператор
[]Инициализация массива
Массивы и оператор
sizeofСвязь массивов и указателей
Одномерные массивы
Двухмерные массивы более подробно
Многомерные массивы
Массивы указателей
Динамические массивы
Управление памятью. Низкоуровневые функции языка Си
Управление памятью. Операторы C++
new и
deleteСборщик мусора (
garbage collector)
Операторы
new[] и
delete[] и массивы
Инициализация динамических массивов
СсылкиПонятие ссылки
Сравнение ссылок и указателей
ФункцииПонятия, связанные с функциями
Объявление (прототип) функции
Определение функции (реализация)
Вызов функции
Вызов
inline-функции
Соглашения о вызове функции
Способы передачи параметров в функцию
Передача параметров по значению (
Call-By-Value)
Передача параметров по адресу
Специфика передачи параметров
Переменное число параметров
Возвращаемое значение
Виды возвращаемых значений и механизмы их формирования
Проблемы при возвращении ссылки или указателя
Ключевое слово
const и функции
Передача функции константных параметров
Возвращение функцией константных значений
Перегрузка имен функций
Возможные конфликты при использовании параметров по умолчанию
Рекурсивные функции
Указатель на функцию
Определение указателя на функцию
Инициализация указателя на функцию
Вызов функции посредством указателя
Использование указателей на функции в качестве параметров
Использование указателя на функцию в качестве возвращаемого значения
Массивы указателей на функции
Ключевое слово
typedef и сложные указатели
Ключевое слово
typedef и указатели на функции
Функции, возвращающие сложные указатели
СтруктурыЗачем нужны структуры
Объявление структуры
Создание экземпляров структуры и присваивание значений полям структуры
Ключевое слово
typedef и структуры
Совмещение объявления и определения. Анонимные структуры
Инициализация структурных переменных
Действия со структурами
Поля структуры пользовательского типа
Вложенные (
nested) структуры
Указатели и структуры
Упаковка полей структуры компилятором. Оператор
sizeof применительно к структурам
Структуры и функции
Передача структуры в функцию в качестве параметра
Возврат структуры по значению
Что можно использовать в качестве поля структуры
Поля битов
Объединения (union)Понятие объединения
Использование объединений
Размер объединения
Инициализация объединений
Анонимные объединения (специфика Microsoft)
ПриложенияПредставление данныхО системах счисления и изображении количеств
Перевод чисел из одной системы счисления в другую
Использование различных систем счисления при технической реализации средств цифровой вычислительной техники
Особенности выполнения арифметических операций в ограниченной разрядной сетке
Изображение знакопеременных величин
Выявление переполнений при выполнении сложения и вычитания
Смена знака целого знакопеременного числа
Действия с повышенной разрядностью
Особенности умножения и деления целых двоичных чисел
Приведение типов данных
Числа с плавающей точкой
Неоднозначность представления и нормализованная форма
Форматы представления чисел ПТ двоичным кодом
Стандарт на числа ПТ ANSI/IEEE 754-1985
О понятии старшинства арифметических типов данных
Битовые поля и операции над ними
Подробнее об операциях сдвига
Язык Си и низкоуровневое программированиеНизкоуровневая (регистровая) модель вычислительного ядра
Оптимизация фрагмента кода по скорости
Определение положения программы в пространстве адресов
Использование средств уровня языка Ассемблера в программах на Си
Работа с регистрами периферийных устройств
Синхронизация программы с внешним событием
Программирование обработчиков прерываний
Запрет/разрешение прерываний процессору
Приоритеты и управление ими
Программирование без операционной системы
Предметный указатель