Предисловие Паскаля Куока....14
Предисловие Олли Уайтхауса....15
Благодарности....16
Введение....17
Краткая история C....18
Стандарт C....19
Стандарт программирования CERT C....20
Для кого эта книга....20
Структура книги....21
От издательства....23
Глава 1. Знакомство с C....24
Разработка вашей первой программы на C....24
Компиляция и запуск вашей программы....25
Директивы препроцессора....26
Функция main....26
Проверка возвращаемого значения функции....28
Форматированный вывод....29
Редакторы и интегрированные среды разработки....30
Компиляторы....32
GNU Compiler Collection....32
Clang....33
Microsoft Visual Studio....33
Переносимость....34
Поведение, определяемое реализацией....35
Неуточненное поведение....35
Неопределенное поведение....35
Поведение, зависящее от региональных параметров, и распространенные расширения....37
Резюме....37
Глава 2. Объекты, функции и типы....38
Объекты, функции, типы и указатели....38
Объявление переменных....39
Перестановка значений местами (первая попытка)....40
Перестановка значений местами (вторая попытка)....42
Область видимости....44
Срок хранения....45
Выравнивание....47
Объектные типы....49
Логические типы....49
Символьные типы....49
Численные типы....50
Тип void....52
Функциональные типы....52
Производные типы....54
Указатели....54
Массивы....55
Структуры....57
Объединения....58
Теги....59
Квалификаторы типов....61
Квалификатор const....62
Квалификатор volatile....62
Квалификатор restrict....63
Упражнения....64
Резюме....64
Глава 3. Арифметические типы....65
Целые числа....65
Заполнение и точность....66
Заголовочный файл ....66
Объявление целочисленных переменных....67
Беззнаковые целые....67
Знаковые целые....71
Целочисленные константы....76
Числа с плавающей запятой....77
Типы с плавающей запятой....78
Арифметические операции с плавающей запятой....80
Значения с плавающей запятой....80
Константы с плавающей запятой....82
Арифметическое преобразование....83
Ранг преобразования целочисленных типов....84
Повышение разрядности целочисленных значений....85
Обычные арифметические преобразования....86
Пример автоматического приведения типов....88
Безопасное приведение типов....89
Резюме....91
Глава 4. Выражения и операции....92
Простое присваивание....92
Оценивание....94
Вызов функции....95
Операции инкремента и декремента....96
Приоритет и ассоциативность операций....97
Порядок вычисления....100
Непоследовательные и неопределенно последовательные вычисления....101
Точки следования....102
Операция sizeof....103
Арифметические операции....104
Унарные операции + и –....104
Логическая операция отрицания....105
Мультипликативные операции....105
Аддитивные операции....107
Побитовые операции....107
Операция дополнения....107
Операции сдвига....108
Побитовое И....110
Побитовое исключающее ИЛИ....111
Побитовое включающее ИЛИ....112
Логические операции....112
Операции приведения типов....114
Условная операция....115
Операция _Alignof....116
Операции сравнения....117
Операции составного присваивания....118
Операция «запятая»....118
Арифметические операции с указателями....119
Резюме....121
Глава 5. Управляющая логика....122
Операторы-выражения....122
Составные операторы....123
Операторы выбора....124
Оператор if....124
Оператор switch....128
Операторы итерирования....131
Оператор while....131
Оператор do...while....133
Оператор for....134
Операторы перехода....136
Оператор goto....136
Оператор continue....138
Оператор break....139
Оператор return....140
Упражнения....141
Резюме....141
Глава 6. Динамически выделяемая память....142
Срок хранения....142
Куча и диспетчеры памяти....143
Когда следует использовать динамически выделяемую память....144
Функции для управления памятью....145
Функция malloc....145
Функция aligned_alloc....148
Функция calloc....149
Функция realloc....149
Функция reallocarray....152
Функция free....152
Состояния памяти....154
Структуры с гибкими массивами....155
Другие виды динамически выделяемой памяти....157
Функция alloca....157
Массивы переменной длины....159
Отладка проблем, связанных с выделением памяти....163
Библиотека dmalloc....163
Системы с повышенными требованиями к безопасности....166
Упражнения....166
Резюме....167
Глава 7. Символы и строки....168
Символы....168
ASCII....169
Unicode....169
Исходная и исполняемая кодировки....171
Типы данных....172
Символьные константы....175
Управляющие последовательности....176
Linux....177
Windows....178
Преобразование символов....180
Строки....184
Строковые литералы....186
Функции для работы со строками....188
Заголовочные файлы и ....189
Интерфейсы с проверкой ограничений из приложения K....197
POSIX....200
Microsoft....202
Резюме....203
Глава 8. Ввод/вывод....204
Стандартные потоки ввода/вывода....204
Буферизация потоков....205
Встроенные потоки....206
Направленность потоков....208
Текстовые и двоичные потоки....208
Открытие и создание файлов....209
Функция fopen....209
Функция open из стандарта POSIX....212
Закрытие файлов....214
Функция fclose....214
Функция close из стандарта POSIX....215
Чтение и запись символов и строчек....216
Сброс потока на диск....218
Установка позиции в файле....219
Удаление и переименование файлов....222
Использование временных файлов....223
Чтение потоков форматированного текста....224
Чтение из двоичных потоков и запись в них....228
Резюме....232
Глава 9. Препроцессор (в соавторстве с Аароном Баллманом)....233
Процесс компиляции....233
Подключение файлов....235
Строки подключения с кавычками и угловыми скобками....236
Условное подключение....237
Генерация ошибок....238
Использование защиты подключения....239
Определение макросов....241
Замена макросов....244
Макросы с обобщенными типами....246
Встроенные макросы....248
Резюме....249
Глава 10. Структура программы (в соавторстве с Аароном Баллманом)....250
Принципы компонентного представления....250
Связанность и слаженность....251
Повторное использование кода....252
Абстракция данных....253
Непрозрачные типы....254
Исполняемые файлы....256
Компоновка....258
Структурирование простой программы....260
Сборка кода....265
Резюме....268
Глава 11. Отладка, тестирование и анализ....269
Утверждения....269
Статические утверждения....269
Динамические утверждения....272
Параметры и флаги компиляторов....274
GCC и Clang....275
Visual C++....279
Отладка....281
Модульное тестирование....285
Статический анализ....289
Динамический анализ....292
AddressSanitizer....293
Упражнения....298
Резюме....298
Список литературы....299
Об авторе....302
О соавторе....302
О научном редакторе....303
Мир работает на коде, написанном на C, но в большинстве учебных заведений программированию учат на Python или Java. Книга «Эффективный C. Профессиональное программирование» восполняет этот пробел и предлагает современный взгляд на C. Здесь рассмотрен C17, а также потенциальные возможности C2x. Издание неизбежно станет классикой, с его помощью вы научитесь писать профессиональные и надежные программы на C, которые лягут в основу устойчивых систем и решат реальные задачи.