![](/user_photo/2706_HbeT2.jpg)
- •Введение
- •Соглашения о нотации
- •Часть 1 описание языка си элементы языка си
- •Алфавит
- •Буквы и цифры
- •Пробельные символы
- •Разделители
- •Специальные символы
- •Операции
- •Константы
- •Целые константы
- •Константы с плавающей точкой
- •Символьные константы
- •Символьные строки
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Структура программы Исходная программа
- •Исходные файлы
- •Выполнение программы
- •Время жизни и область действия
- •Пространства имен
- •Объявления
- •Базовые типы данных
- •Спецификации типов и их сокращения
- •Области значений
- •Размер памяти и область значений типов
- •Описатели Синтаксис описателей
- •Интерпретация составных описателей
- •Описатели с модификаторами
- •Интерпретация описателей с модификаторами
- •Модификаторы const и volatile
- •Модификаторы cdecl и pascal
- •Модификатор pascal
- •Модификаторы near, far, huge
- •Модификатор interrupt
- •Объявление переменных
- •Объявление простой переменной
- •Объявление переменной перечислимого типа
- •Объявление структуры
- •Битовые поля
- •Объявление объединения
- •Объявление массива
- •Объявление указателя
- •Объявление функции (прототип)
- •Список типов аргументов
- •Классы памяти
- •Объявление переменной на внешнем уровне
- •Объявление переменной на внутреннем уровне
- •Инициализация
- •Базовые типы и указатели
- •Составные типы
- •Строковые инициализаторы
- •Объявление типа
- •Объявление тега
- •Объявление typedef
- •Абстрактные имена типов
- •Выражения Введение
- •Операнды
- •Идентификаторы
- •Константы
- •Символьные строки
- •Вызовы функций
- •Индексные выражения
- •Доступ к многомерному массиву
- •Выбор элемента
- •Операции и l-выражения
- •Скобочные выражения
- •Константные выражения
- •Операции
- •Преобразования по умолчанию
- •Унарные операции Унарный минус (-)
- •Логическое отрицание (!)
- •Адресация "&"
- •Косвенная адресация "*"
- •Операция sizeof
- •Мультипликативные операции
- •Умножение (*)
- •Деление (/)
- •Остаток от деления (%)
- •Аддитивные операции
- •Вычитание (-)
- •Адресная арифметика
- •Операции сдвига
- •Операции отношения
- •Поразрядные операции
- •Логические операции
- •Логическое и (&&)
- •Логическое или (||)
- •Операция последовательного вычисления
- •Условная операция
- •Операции присваивания
- •Операции инкремента и декремента
- •Простое присваивание
- •Составное присваивание
- •Приоритет и порядок выполнения
- •Приоритет и ассоциативность операций в языке Си
- •Побочные эффекты
- •Преобразования типов
- •Преобразования типов при присваивании
- •Преобразование знаковых целых типов
- •Преобразование беззнаковых целых типов
- •Преобразование беззнаковых целых типов
- •Преобразование указателей
- •Преобразования других типов
- •Явные преобразования типов
- •Преобразования типов при вызовах функций
- •Операторы Введение
- •Пустой оператор
- •Составной оператор
- •Оператор-выражение
- •Условный оператор if
- •Вложенность
- •Оператор пошагового цикла for
- •Оператор цикла с предусловием while
- •Оператор цикла с постусловием do
- •Оператор продолжения continue
- •Оператор-переключатель switch
- •Оператор разрыва break
- •Оператор перехода goto
- •Оператор возврата return
- •Функции Введение
- •Определение функции
- •Класс памяти
- •Модификаторы типа функции
- •Типы возвращаемых значений
- •Формальные параметры
- •Тело функции
- •Объявление функции
- •Вызов функции
- •Фактические аргументы
- •Вызов функции с переменным числом аргументов
- •Рекурсивные вызовы
- •Директивы препроцессора и указания компилятору Введение
- •Именованные константы и макроопределения
- •Директива #define
- •Склейка лексем и преобразование аргументов макроопределений
- •Директива #undef
- •Включение файлов
- •Условная компиляция
- •Директивы #if, #elif, #else, #endif
- •Директивы #ifdef и #ifndef
- •Управление нумерацией строк
- •Директива обработки ошибок
- •Пустая директива
- •Указания компилятору языка Си
- •Псевдопеременные
- •Модели памяти
- •Виды моделей
- •Малая модель
- •Средняя модель
- •Компактная модель
- •Большая модель
- •Максимальная модель
- •Модификация стандартной модели памяти
- •Объявление данных
- •Объявление функций
- •Модели памяти сп тс
- •Часть II
- •Краткое описание библиотеки
- •Работа с областями памяти и строками
- •Определение класса символов и преобразование символов
- •Форматные преобразования данных
- •Работа с каталогами файловой системы
- •Операции над файлами
- •Ввод и вывод
- •Функции вода/вывода высокого уровня
- •Высокоуровневое открытие файлов
- •Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.
- •Управление буферизацией потоков
- •Закрытие потоков
- •Чтение и запись данных
- •Обнаружение ошибок
- •Функции вода/вывода нижнего уровня
- •Открытие файлов
- •9.6.2.2. Переопределение дескрипторов (handle)
- •Чтение и запись данных
- •Закрытие файлов
- •Функции вода/вывода с консольного терминала и порта
- •Математические функции
- •Динамическое распределение памяти
- •Использование системных вызовов операционной системы ms-dos
- •Управление процессами
- •Поиск и сортировка
- •Функции работы со временем
- •Функции работы со списком аргументов
- •Другие функции
Операции
Операции — это комбинации символов, специфицирующие действия по преобразованию значений. Компилятор языка Си интерпретирует каждую из этих комбинаций как самостоятельную лексему.
В таблице 1.3. представлен список операций. Операции должны использоваться точно так, как они представлены в таблице,' без пробельных символов между символами в тех операциях, которые представлены несколькими символами.
Операция sizeof не включена в эту таблицу, поскольку задается ключевым словом, а не символом.
Таблица 1.3.
Примечание. Условная операция ?: является не двухсимвольной, а тернарной (трехоперандной) операцией. Она имеет следующий формат: <операнд1> ? <операнд2> : <операнд3>
Константы
Константа — это число, символ или строка символов. Константы используются в программе для задания постоянных величин. В языке Си различают четыре типа констант: целые, с плавающей точкой, символьные константы и символьные строки.
Целые константы
Целая константа — это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целое значение. Десятичная константа имеет следующий формат представления:
<цифры>
<цифры> — последовательность из одной или более десятичных цифр от 0 до 9.
Восьмеричная константа имеет следующий формат представления:
0<в-цифры>
<в-цифры>— это одна или более восьмеричных цифр от 0 до 7. Запись нуля впереди обязательна.
Шестнадцатеричная константа имеет следующий формат представления:
0х<ш-цифры > или 0Х<ш-цифры>
<ш-цифры > — одна или более шестнадцатеричных цифр. Шестнадцатеричная цифра может быть цифрой от 0 до 9 или буквой (большой или малой) от А до F. Допускается "смесь" больших и малых букв. Запись нуля впереди и следующего за ним символа х или Х обязательна.
Между цифрами целой константы пробельные символы недопустимы. В таблице 1.4 приведены примеры целых констант. Константы, записанные в одной строке таблицы, используются для представления одного и того же значения.
Таблица 1.4.
Целые константы всегда специфицируют положительные значения. Если требуется отрицательное значение, то необходимо сформировать константное выражение из знака минус и следующей за ним константы. Знак минус рассматривается при этом как арифметическая операция.
Каждая целая константа имеет тип, определяющий ее представление в памяти (описание типов приведено в разделе 3.1 "Базовые типы данных"). Десятичные константы могут иметь тип int (целый тип) или long (длинный целый тип).
Восьмеричные и шестнадцатеричные константы в зависимости от размера могут иметь тип int , unsigned int , long или unsigned long . Если константа может быть представлена типом int , то компилятор языка Си присваивает ей тип int . Если ее значение больше, чем максимальное положительное значение, которое может быть представлено типом int , но может быть представлено тем же числом битов, что и int , ей присваивается тип unsigned int . Наконец, константа, значение которой больше, чем максимальное значение, представляемое типом unsigned int , задается типом long или, если размер этого типа также оказывается недостаточен, типом unsigned long . В таблице 1.5 показаны диапазоны значений констант различных типов для компьютера, на котором тип int имеет длину 16 битов и тип long имеет длину 32 бита.
Таблица1.5.
Из рассмотренных правил следует, что при преобразовании восьмеричных и шестнадцатеричных констант к более длинным типам не производится расширения знака (поскольку старший, знаковый бит всегда равен нулю).
Программист может явно определить для любой целой константы тип long , записав букву "l " или "L " в конец константы. Это позволяет расширить нижнюю границу диапазона значений констант любого типа до нуля. Например, константа со значением 10 будет иметь тип long только в том случае, если она будет записана с суффиксом L , т. е. 10L. В таблице 1.6 приведены примеры длинных целых констант.
Таблица 1.6.
В СП ТС реализован также суффикс U (или u ), означающий, что константа имеет тип unsigned . Можно использовать одновременно оба суффикса — L и U — для одной и той же константы. Кроме того, в СП ТС константе присваивается тип unsigned long , если ее значение превышает 65535 , независимо от наличия или отсутствия суффикса U (в СП MSC в этом случае константе был бы присвоен тип long ).