Введение ............................................................................................................................ 9
Глава 1. Установка программ под Windows ............................................................ 11
1.1. Создание структуры каталогов .............................................................................................. 11
1.2. Добавление пути в переменную PATH ................................................................................. 12
1.3. Работа с командной строкой .................................................................................................. 14
1.4. Установка MinGW и MSYS ................................................................................................... 14
1.5. Установка MinGW-W64 ......................................................................................................... 20
1.6. Установка MSYS2 и MinGW-W64 ........................................................................................ 24
1.7. Установка и настройка редактора Eclipse ............................................................................ 29
1.8. Создание проектов в редакторе Eclipse ................................................................................ 34
Глава 2. Первые шаги .................................................................................................. 44
2.1. Первая программа ................................................................................................................... 44
2.2. Создание пустого проекта в редакторе Eclipse .................................................................... 47
2.3. Добавление в проект файла с программой ........................................................................... 49
2.4. Добавление в проект заголовочного файла .......................................................................... 50
2.5. Компиляция и запуск программы в редакторе Eclipse ........................................................ 53
2.6. Структура программы ............................................................................................................ 57
2.7. Комментарии в программе ..................................................................................................... 63
2.8. Вывод данных ......................................................................................................................... 65
2.9. Ввод данных ............................................................................................................................ 71
2.9.1. Ввод одного символа ................................................................................................... 71
2.9.2. Функция scanf() ............................................................................................................ 72
2.9.3. Ввод строки .................................................................................................................. 77
2.10. Интерактивный ввод символов............................................................................................ 80
2.11. Получение данных из командной строки ........................................................................... 82
2.12. Предотвращение закрытия окна консоли ........................................................................... 84
2.13. Настройка отображения русских букв в консоли .............................................................. 86
2.14. Преждевременное завершение выполнения программы ................................................... 89
Глава 3. Переменные и типы данных ....................................................................... 91
3.1. Объявление переменной ........................................................................................................ 91
3.2. Именование переменных ....................................................................................................... 92
3.3. Типы данных ........................................................................................................................... 93
3.4. Целочисленные типы фиксированного размера .................................................................. 97
3.5. Оператор sizeof и тип size_t .................................................................................................... 99
3.6. Инициализация переменных ................................................................................................ 100
3.7. Оператор typedef ................................................................................................................... 100
3.8. Константы ............................................................................................................................. 101
3.9. Спецификаторы хранения .................................................................................................... 104
3.10. Области видимости переменных ....................................................................................... 105
3.11. Массивы .............................................................................................................................. 107
3.12. Строки .................................................................................................................................. 110
3.13. Указатели ............................................................................................................................. 111
3.14. Динамическое выделение памяти ..................................................................................... 118
3.14.1. Функции malloc() и free() ....................................................................................... 118
3.14.2. Функция calloc() ...................................................................................................... 119
3.14.3. Функция realloc() .................................................................................................... 122
3.15. Структуры ........................................................................................................................... 123
3.16. Битовые поля ....................................................................................................................... 126
3.17. Объединения ....................................................................................................................... 127
3.18. Перечисления ...................................................................................................................... 129
3.19. Приведение типов ............................................................................................................... 130
Глава 4. Операторы и циклы .................................................................................... 133
4.1. Математические операторы ................................................................................................. 133
4.2. Побитовые операторы .......................................................................................................... 135
4.3. Операторы присваивания ..................................................................................................... 138
4.4. Оператор запятая .................................................................................................................. 138
4.5. Операторы сравнения ........................................................................................................... 139
4.6. Приоритет выполнения операторов .................................................................................... 141
4.7. Оператор ветвления if ........................................................................................................... 142
4.8. Оператор ?: ........................................................................................................................... 146
4.9. Оператор выбора switch ....................................................................................................... 147
4.10. Цикл for ............................................................................................................................... 149
4.11. Цикл while............................................................................................................................ 152
4.12. Цикл do...while..................................................................................................................... 152
4.13. Оператор continue: переход на следующую итерацию цикла ......................................... 153
4.14. Оператор break: прерывание цикла ................................................................................... 153
4.15. Оператор goto ...................................................................................................................... 154
Глава 5. Числа .............................................................................................................. 156
5.1. Математические константы ................................................................................................. 159
5.2. Основные функции для работы с числами ......................................................................... 160
5.3. Округление чисел ................................................................................................................. 164
5.4. Тригонометрические функции ............................................................................................ 165
5.5. Преобразование строки в число .......................................................................................... 165
5.6. Преобразование числа в строку ........................................................................................... 174
5.7. Генерация псевдослучайных чисел ..................................................................................... 177
5.8. Бесконечность и значение NAN ........................................................................................... 179
Глава 6. Массивы ........................................................................................................ 181
6.1. Объявление и инициализация массива ............................................................................... 181
6.2. Определение количества элементов и размера массива .................................................... 183
6.3. Получение и изменение значения элемента массива ......................................................... 184
6.4. Перебор элементов массива ................................................................................................. 185
6.5. Доступ к элементам массива с помощью указателя .......................................................... 186
6.6. Массивы указателей ............................................................................................................. 189
6.7. Динамические массивы ........................................................................................................ 189
6.8. Многомерные массивы ........................................................................................................ 190
6.9. Поиск минимального и максимального значений ............................................................. 193
6.10. Сортировка массива ........................................................................................................... 195
6.11. Проверка наличия значения в массиве ............................................................................. 198
6.12. Копирование элементов из одного массива в другой ...................................................... 201
6.13. Сравнение массивов ........................................................................................................... 203
6.14. Переворачивание массива .................................................................................................. 204
Глава 7. Символы и C-строки .................................................................................. 206
7.1. Объявление и инициализация отдельного символа ........................................................... 206
7.2. Настройка локали ................................................................................................................. 212
7.3. Изменение регистра символов ............................................................................................. 216
7.4. Проверка типа содержимого символа ................................................................................. 218
7.5. Объявление и инициализация C-строки .............................................................................. 222
7.6. Доступ к символам внутри C-строки .................................................................................. 224
7.7. Определение длины строки ................................................................................................. 225
7.8. Перебор символов C-строки ................................................................................................ 226
7.9. Основные функции для работы с C-строками .................................................................... 227
7.10. Поиск и замена в C-строке ................................................................................................. 232
7.11. Сравнение С-строк .............................................................................................................. 237
7.12. Форматирование С-строк ................................................................................................... 242
Глава 8. Широкие символы и L-строки ................................................................. 244
8.1. Объявление и инициализация широкого символа ............................................................. 245
8.2. Вывод и ввод широких символов ........................................................................................ 247
8.3. Изменение регистра символов ............................................................................................. 249
8.4. Проверка типа содержимого широкого символа ............................................................... 251
8.5. Преобразование широких символов в обычные и наоборот............................................. 255
8.6. Объявление и инициализация L-строки .............................................................................. 256
8.7. Доступ к символам внутри L-строки................................................................................... 257
8.8. Определение длины L-строки .............................................................................................. 258
8.9. Перебор символов L-строки ................................................................................................ 259
8.10. Вывод и ввод L-строк ......................................................................................................... 260
8.11. Преобразование C-строки в L-строку и наоборот............................................................ 263
8.12. Преобразование кодировок ................................................................................................ 265
8.13. Основные функции для работы с L-строками .................................................................. 271
8.14. Поиск и замена в L-строке ................................................................................................. 277
8.15. Сравнение L-строк .............................................................................................................. 282
8.16. Преобразование L-строки в число ..................................................................................... 286
8.17. Преобразование числа в L-строку ..................................................................................... 294
8.18. Типы char16_t и char32_t ................................................................................................... 297
Глава 9. Работа с датой и временем ......................................................................... 300
9.1. Получение текущей даты и времени ................................................................................... 301
9.2. Форматирование даты и времени ........................................................................................ 305
9.3. «Засыпание» программы ...................................................................................................... 309
9.4. Измерение времени выполнения фрагментов кода ........................................................... 311
Глава 10. Пользовательские функции .................................................................... 312
10.1. Создание функции и ее вызов ............................................................................................ 312
10.2. Расположение объявлений и определений функций ....................................................... 315
10.3. Способы передачи параметров в функцию ...................................................................... 318
10.4. Передача массивов и строк в функцию ............................................................................ 320
10.5. Переменное количество параметров ................................................................................. 324
10.6. Константные параметры .................................................................................................... 325
10.7. Статические переменные и функции ................................................................................ 326
10.8. Способы возврата значения из функции ........................................................................... 328
10.9. Указатели на функции ........................................................................................................ 330
10.10. Передача в функцию и возврат данных произвольного типа ....................................... 331
10.11. Рекурсия ............................................................................................................................ 332
10.12. Встраиваемые функции .................................................................................................... 333
Глава 11. Обработка ошибок .................................................................................... 336
11.1. Типы ошибок....................................................................................................................... 336
11.2. Предупреждающие сообщения при компиляции ............................................................. 337
11.3. Переменная errno и вывод сообщения об ошибке ........................................................... 338
11.4. Способы поиска ошибок в программе .............................................................................. 341
11.5. Отладка программы в редакторе Eclipse .......................................................................... 345
Глава 12. Чтение и запись файлов ........................................................................... 351
12.1. Открытие и закрытие файла .............................................................................................. 351
12.2. Указание пути к файлу ....................................................................................................... 354
12.3. Режимы открытия файла .................................................................................................... 356
12.4. Запись в файл ...................................................................................................................... 358
12.5. Чтение из файла .................................................................................................................. 360
12.6. Чтение и запись двоичных файлов .................................................................................... 363
12.7. Файлы произвольного доступа .......................................................................................... 365
12.8. Создание временных файлов ............................................................................................. 367
12.9. Перенаправление ввода/вывода ......................................................................................... 369
12.10. Работа с буфером ввода и вывода ................................................................................... 372
Глава 13. Низкоуровневые потоки ввода и вывода ............................................. 374
13.1. Открытие и закрытие файла .............................................................................................. 374
13.2. Чтение из файла и запись в файл ....................................................................................... 377
13.3. Файлы произвольного доступа .......................................................................................... 380
13.4. Создание временных файлов ............................................................................................. 381
13.5. Дескрипторы потоков ввода/вывода ................................................................................. 382
13.6. Преобразование низкоуровневого потока в обычный ..................................................... 383
13.7. Создание копии потока ...................................................................................................... 384
13.8. Перенаправление потоков .................................................................................................. 384
Глава 14. Работа с файловой системой ................................................................... 386
14.1. Преобразование пути к файлу или каталогу ..................................................................... 386
14.2. Переименование, перемещение и удаление файла .......................................................... 390
14.3. Проверка прав доступа к файлу и каталогу ...................................................................... 391
14.4. Изменение прав доступа к файлу ...................................................................................... 393
14.5. Делаем файл скрытым ........................................................................................................ 394
14.6. Получение информации о файле ....................................................................................... 395
14.7. Функции для работы с дисками ......................................................................................... 399
14.8. Функции для работы с каталогами .................................................................................... 401
14.9. Перебор объектов, расположенных в каталоге ................................................................ 403
Глава 15. Потоки и процессы .................................................................................... 407
15.1. Потоки в WinAPI ................................................................................................................ 407
15.1.1. Создание и завершение потока .............................................................................. 407
15.1.2. Синхронизация потоков ......................................................................................... 412
15.2. Функции для работы с потоками, объявленные в файле process.h ................................. 417
15.3. Потоки POSIX ..................................................................................................................... 420
15.3.1. Создание и завершение потока .............................................................................. 420
15.3.2. Синхронизация потоков ......................................................................................... 423
15.4. Запуск процессов ................................................................................................................ 426
15.5. Получение идентификатора процесса ............................................................................... 429
Глава 16. Создание библиотек .................................................................................. 430
16.1. Статические библиотеки .................................................................................................... 430
16.1.1. Создание статической библиотеки из командной строки ................................... 430
16.1.2. Создание статической библиотеки в редакторе Eclipse ...................................... 434
16.2. Динамические библиотеки ................................................................................................. 438
16.2.1. Создание динамической библиотеки из командной строки ................................ 438
16.2.2. Создание динамической библиотеки в редакторе Eclipse ................................... 440
16.2.3. Загрузка динамической библиотеки во время выполнения программы ............ 443
16.2.4. Экспортируемые и внутренние функции .............................................................. 446
16.2.5. Функция DllMain() .................................................................................................. 446
Глава 17. Прочее .......................................................................................................... 448
17.1. Регистрация функции, выполняемой при завершении программы ................................ 448
17.2. Выполнение системных команд ........................................................................................ 449
17.3. Получение и изменение значений системных переменных ............................................ 451
17.4. Директивы препроцессора ................................................................................................. 454
17.5. Создание значка приложения ............................................................................................ 455
Заключение ................................................................................................................... 459
Приложение. Описание электронного архива ....................................................... 461
Предметный указатель .............................................................................................. 463
Описан базовый синтаксис современного языка С: типы данных, операторы, условия, циклы, работа с числами, строками, массивами и указателями, создание пользовательских функций, модулей, статических и динамических библиотек. Рассмотрены основные функции стандартной библиотеки языка С, а также функции, применяемые только в операционной системе Windows. Для написания, компиляции и запуска программ используется редактор Eclipse, а для создания исполняемого файла - компилятор gcc.exe версии 8.2, входящий в состав популярной библиотеки MinGW-W64.
Книга содержит большое количество практических примеров, помогающих начать программировать на языке С самостоятельно. Весь материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник. Электронный архив с примерами находится на сайте издательства.