Мир работает на коде, написанном на C, но в большинстве учебных заведений программированию учат на Python или Java. Книга «Эффективный C. Профессиональное программирование» восполняет этот пробел и предлагает современный взгляд на C. Здесь рассмотрен C17, а также потенциальные возможности C2x. Издание неизбежно станет классикой, с его помощью вы научитесь писать профессиональные и надежные программы на C, которые лягут в основу устойчивых систем и решат реальные задачи.
Author(s): Роберт С. Сикорд
Series: Библиотека программиста
Edition: 1
Publisher: Питер
Year: 2022
Language: Russian
Commentary: Vector PDF
Pages: 304
City: СПб.
Tags: Programming; Debugging; Memory Management; Static Analysis; C; Unit Testing; Testing; Elementary
Предисловие Паскаля Куока
Предисловие Олли Уайтхауса
Благодарности
Введение
Краткая история C
Стандарт C
Стандарт программирования CERT C
Для кого эта книга
Структура книги
От издательства
Глава 1. Знакомство с C
Разработка вашей первой программы на C
Компиляция и запуск вашей программы
Директивы препроцессора
Функция main
Проверка возвращаемого значения функции
Форматированный вывод
Редакторы и интегрированные среды разработки
Компиляторы
GNU Compiler Collection
Clang
Microsoft Visual Studio
Переносимость
Поведение, определяемое реализацией
Неуточненное поведение
Неопределенное поведение
Поведение, зависящее от региональных параметров, и распространенные расширения
Резюме
Глава 2. Объекты, функции и типы
Объекты, функции, типы и указатели
Объявление переменных
Перестановка значений местами (первая попытка)
Перестановка значений местами (вторая попытка)
Область видимости
Срок хранения
Выравнивание
Объектные типы
Логические типы
Символьные типы
Численные типы
Тип void
Функциональные типы
Производные типы
Указатели
Массивы
Структуры
Объединения
Теги
Квалификаторы типов
Квалификатор const
Квалификатор volatile
Квалификатор restrict
Упражнения
Резюме
Глава 3. Арифметические типы
Целые числа
Заполнение и точность
Заголовочный файл
Объявление целочисленных переменных
Беззнаковые целые
Знаковые целые
Целочисленные константы
Числа с плавающей запятой
Типы с плавающей запятой
Арифметические операции с плавающей запятой
Значения с плавающей запятой
Константы с плавающей запятой
Арифметическое преобразование
Ранг преобразования целочисленных типов
Повышение разрядности целочисленных значений
Обычные арифметические преобразования
Пример автоматического приведения типов
Безопасное приведение типов
Резюме
Глава 4. Выражения и операции
Простое присваивание
Оценивание
Вызов функции
Операции инкремента и декремента
Приоритет и ассоциативность операций
Порядок вычисления
Непоследовательные и неопределенно последовательные вычисления
Точки следования
Операция sizeof
Арифметические операции
Унарные операции + и –
Логическая операция отрицания
Мультипликативные операции
Аддитивные операции
Побитовые операции
Операция дополнения
Операции сдвига
Побитовое И
Побитовое исключающее ИЛИ
Побитовое включающее ИЛИ
Логические операции
Операции приведения типов
Условная операция
Операция _Alignof
Операции сравнения
Операции составного присваивания
Операция «запятая»
Арифметические операции с указателями
Резюме
Глава 5. Управляющая логика
Операторы-выражения
Составные операторы
Операторы выбора
Оператор if
Оператор switch
Операторы итерирования
Оператор while
Оператор do...while
Оператор for
Операторы перехода
Оператор goto
Оператор continue
Оператор break
Оператор return
Упражнения
Резюме
Глава 6. Динамически выделяемая память
Срок хранения
Куча и диспетчеры памяти
Когда следует использовать динамически выделяемую память
Функции для управления памятью
Функция malloc
Функция aligned_alloc
Функция calloc
Функция realloc
Функция reallocarray
Функция free
Состояния памяти
Структуры с гибкими массивами
Другие виды динамически выделяемой памяти
Функция alloca
Массивы переменной длины
Отладка проблем, связанных с выделением памяти
Библиотека dmalloc
Системы с повышенными требованиями к безопасности
Упражнения
Резюме
Глава 7. Символы и строки
Символы
ASCII
Unicode
Исходная и исполняемая кодировки
Типы данных
Символьные константы
Управляющие последовательности
Linux
Windows
Преобразование символов
Строки
Строковые литералы
Функции для работы со строками
Заголовочные файлы и
Интерфейсы с проверкой ограничений из приложения K
POSIX
Microsoft
Резюме
Глава 8. Ввод/вывод
Стандартные потоки ввода/вывода
Буферизация потоков
Встроенные потоки
Направленность потоков
Текстовые и двоичные потоки
Открытие и создание файлов
Функция fopen
Функция open из стандарта POSIX
Закрытие файлов
Функция fclose
Функция close из стандарта POSIX
Чтение и запись символов и строчек
Сброс потока на диск
Установка позиции в файле
Удаление и переименование файлов
Использование временных файлов
Чтение потоков форматированного текста
Чтение из двоичных потоков и запись в них
Резюме
Глава 9. Препроцессор (в соавторстве с Аароном Баллманом)
Процесс компиляции
Подключение файлов
Строки подключения с кавычками и угловыми скобками
Условное подключение
Генерация ошибок
Использование защиты подключения
Определение макросов
Замена макросов
Макросы с обобщенными типами
Встроенные макросы
Резюме
Глава 10. Структура программы (в соавторстве с Аароном Баллманом)
Принципы компонентного представления
Связанность и слаженность
Повторное использование кода
Абстракция данных
Непрозрачные типы
Исполняемые файлы
Компоновка
Структурирование простой программы
Сборка кода
Резюме
Глава 11. Отладка, тестирование и анализ
Утверждения
Статические утверждения
Динамические утверждения
Параметры и флаги компиляторов
GCC и Clang
Visual C++
Отладка
Модульное тестирование
Статический анализ
Динамический анализ
AddressSanitizer
Упражнения
Резюме
Список литературы
Об авторе
О соавторе
О научном редакторе