Введение | 7 |
|
ЧАСТЬ I. ОПИСАНИЕ ЯЗЫКА СИ | 13 |
|
1. Элементы языка Си | 13 |
|
1.1. Алфавит | 14 |
1.1.1. Буквы и цифры | 14 |
1.1.2. Пробельные символы | 15 |
1.1.3. Разделители | 15 |
1.1.4. Специальные символы | 16 |
1.1.5. Операции | 18 |
1.2. Константы | 19 |
1.2.1. Целые константы | 19 |
1.2.2. Константы с плавающей точкой | 21 |
1.2.3. Символьные константы | 22 |
1.2.4. Символьные строки | 23 |
1.3. Идентификаторы | 25 |
1.4. Ключевые слова | 26 |
1.5. Комментарии | 27 |
|
2. Структура программы | 28 |
|
2.1. Исходная программа | 28 |
2.2. Исходные файлы | 29 |
2.3. Выполнение программы | 31 |
2.4. Время жизни и область действия | 33 |
2.5. Пространства имён | 37 |
|
3. Объявления | 39 |
|
3.1. Базовые типы данных | 40 |
3.2. Области значений | 42 |
3.3. Описатели | 45 |
3.3.1. Синтаксис описателей | 45 |
3.3.2. Интерпретация составных описателей | 45 |
3.3.3. Описатели с модификаторами | 47 |
3.4. Объявление переменных | 54 |
3.4.1. Объявление простой переменной | 55 |
3.4.2. Объявление переменной перечислимого типа | 56 |
3.4.3. Объявление структуры | 58 |
3.4.4. Объявление объединения | 62 |
3.4.5. Объявление массива | 63 |
3.4.6. Объявление указателя | 65 |
3.5. Объявление функции (прототип) | 67 |
3.6. Классы памяти | 70 |
3.6.1. Объявление переменной на внешнем уровне | 71 |
3.6.2. Объявление переменной на внутреннем уровне | 75 |
3.7. Инициализация | 77 |
3.7.1. Базовые типы и указатели | 77 |
3.7.2. Составные типы | 77 |
3.7.3. Строковые инициализаторы | 81 |
3.8. Объявление типа | 80 |
3.8.1. Объявление тега | 82 |
3.8.2. Объявление typedef | 82 |
3.8.3. Абстрактные имена типов | 83 |
|
4. Выражения | 85 |
|
4.1. Введение | 85 |
4.2. Операнды | 85 |
4.2.1. Идентификаторы | 86 |
4.2.2. Константы | 87 |
4.2.3. Символьные строки | 87 |
4.2.4. Вызовы функций | 87 |
4.2.5. Индексные выражения | 88 |
4.2.6. Выбор элемента | 90 |
4.2.7. Операции и L-выражения | 91 |
4.2.8. Скобочные выражения | 93 |
4.2.9. Константные выражения | 93 |
4.3. Операции | 94 |
4.3.1. Преобразования по умолчанию | 95 |
4.3.2. Унарные операции | 95 |
4.3.3. Мультипликативные операции | 99 |
4.3.4. Аддитивные операции | 100 |
4.3.5. Операции сдвига | 102 |
4.3.6. Операции отношения | 102 |
4.3.7. Поразрядные операции | 104 |
4.3.8. Логические операции | 104 |
4.3.9. Операция последовательного вычисления | 105 |
4.3.10. Условная операция | 106 |
4.4. Операции присваивания | 107 |
4.4.1. Операции инкремента и декремента | 107 |
4.4.2. Простое присваивание | 108 |
4.4.3. Составное присваивание | 108 |
4.5. Приоритет и порядок выполнения | 109 |
4.6. Побочные эффекты | 112 |
4.7. Преобразования типов | 113 |
4.7.1. Преобразования типов при присваивании | 113 |
4.7.2. Явные преобразования типов | 118 |
4.7.3. Преобразования типов при вызовах функций | 119 |
|
5. Операторы | 120 |
|
5.1. Введение | 120 |
5.2. Пустой оператор | 121 |
5.3. Составной оператор | 122 |
5.4. Оператор-выражение | 122 |
5.5. Условный оператор if | 123 |
5.6. Оператор пошагового цикла for | 124 |
5.7. Оператор цикла с предусловием while | 125 |
5.8. Оператор цикла с постусловием do | 126 |
5.9. Оператор продолжения continue | 126 |
5.10. Оператор-переключатель switch | 127 |
5.11. Оператор разрыва break | 130 |
5.12. Оператор перехода goto | 131 |
5.13. Оператор возврата return | 131 |
|
6. Функции | 133 |
|
6.1. Введение | 133 |
6.2. Определение функции | 133 |
6.2.1. Класс памяти | 134 |
6.2.2. Модификаторы типа функции | 134 |
6.2.3. Типы возвращаемых значений | 134 |
6.2.4. Формальные параметры | 136 |
6.2.5. Тело функции | 139 |
6.3. Объявление функции | 139 |
6.4. Вызов функции | 141 |
6.4.1. Фактические аргументы | 143 |
6.4.2. Вызов функции с переменным числом аргументов | 145 |
6.4.3. Рекурсивные вызовы | 145 |
|
7. Директивы препроцессора и указания компилятору | 146 |
|
7.1. Введение | 146 |
7.2. Именованные константы и макроопределения | 147 |
7.2.1. Директива #define | 148 |
7.2.2. Склейка лексем и преобразование аргументов |
макроопределений | 151 |
7.2.3. Директива #undef | 152 |
7.3. Включение файлов | 152 |
7.4. Условная компиляция | 154 |
7.4.1. Директивы #if, #elif, #else, #endif | 154 |
7.4.2. Директивы #ifdef и #ifndef | 157 |
7.5. Управление нумерацией строк | 158 |
7.6. Директива обработки ошибок | 159 |
7.7. Пустая директива | 160 |
7.8. Указания компилятору языка Си | 160 |
7.9. Псевдопеременные | 160 |
|
8. Модели памяти | 161 |
|
8.1. Виды моделей | 161 |
8.2. Модификация стандартной модели памяти | 165 |
8.2.1. Объявление данных | 165 |
8.2.2. Объявление функций | 166 |
8.3. Модели памяти СП TC | 167 |
|
ЧАСТЬ II. ОПИСАНИЕ БИБЛИОТЕЧНЫХ ФУНКЦИЙ ЯЗЫКА СИ | 169 |
|
9. Краткое описание библиотеки | 171 |
|
9.1. Работа с областями памяти и строками | 171 |
9.2. Определение класса символов и преобразование символов | 174 |
9.3. Форматные преобразования данных | 174 |
9.4. Работа с каталогами файловой системы | 175 |
9.5. Операции над файлами | 175 |
9.6. Ввод и вывод | 176 |
9.6.1. Функции ввода/вывода высокого уровня | 178 |
9.6.2. Функции ввода/вывода нижнего уровня | 182 |
9.6.3. Функции ввода/вывода с консольного терминала и порта | 184 |
9.7. Математические функции | 185 |
9.8. Динамическое распределение памяти | 187 |
9.9. Использование системных вызовов операционной системы MS-DOS | 189 |
9.10. Управление процессами | 191 |
9.11. Поиск и сортировка | 194 |
9.12. Функции работы со временем | 194 |
9.13. Функции работы со списком аргументов | 195 |
9.14. Другие функции | 196 |
|
10. Полное описание библиотеки | 196 |
|
ПРИЛОЖЕНИЯ: |
|
A. Перечень особенностей реализации языка Си в различных версиях |
СП MSC и СП TC | 370 |
Б. Сообщения об ошибках | 374 |
B. Перечень библиотечных функций с указанием отличий в реализации | 377 |
|
Список литературы | 383 |