
- •6000, Interdata 8/32. Язык "c", однако, не связан с каки-
- •1 Является учебным введением в центральную часть языка "c".
- •1.1. Hачинаем
- •Раздел 7.4. Функция scanf во многом сходна с printf , но она
- •1.5.3. Подсчет символов
- •If (выражение)
- •1.7. Функции
- •1.8. Аргументы - вызов по значению
- •1.10. Область действия: внешние переменные
- •1.11. Резюме
- •2.1. Имена переменных
- •2.9. Побитовые логические операции
- •3.5. Циклы - while и for
- •3.6. Цикл do - while
- •3.7. Оператор break
- •3.8. Оператор continue
- •If (disaster)
- •4.2. Функции, возвращающие нецелые значения
- •2 И 3; она обрабатывает необязательно знак и десятичную точ-
- •4.4. Внешние переменные
- •1, Это соображение следует использовать с определенной осто-
- •If ( число )
- •4.6. Статические переменные
- •4.7. Регистровые переменные
- •4.10. Рекурсия
- •4.11.2. Макроподстановка
- •5.1. Указатели и адреса
- •5.5. Указатели символов и функции
- •5.11. Командная строка аргументов
- •Int argc;
- •5.12. Указатели на функции
- •6.2. Структуры и функции
- •6.5. Структуры, ссылающиеся на себя
- •Int count; /* number of occurrences */
- •8 Мы продемонстрируем, как правильно выполнить эту задачу.
- •Int hashval;
- •6.7. Поля
- •Int ival;
- •6.9. Определение типа
- •Int count; /* number of occurrences */
- •7.1. Обращение к стандартной библиотеке
- •7.2. Стандартный ввод и вывод - функции getchar и putchar
- •7.3. Форматный вывод - функция printf
- •7.4. Форматный ввод - функция scanf
- •7.5. Форматное преобразование в памяти
- •7.6. Доступ к файлам
- •7.7. Обработка ошибок - stderr и exit
- •7.8. Ввод и вывод строк
- •8.1. Дескрипторы файлов
- •8.2. Низкоуровневый ввод/вывод - операторы read и write
- •8.4. Произвольный доступ - seek и lseek
- •8.6. Пример - распечатка справочников
- •Ino_t&_ino; /*inode number*/
- •Ino_t st_ino; /* inode number */
- •13. Объекты и l-значения
- •15.1. Первичные выражения
- •15.2. Унарные операции
- •15.3. Мультипликативные операции
- •15.4. Аддитивные операции
- •15.5. Операции сдвига
- •15.6. Операции отношения
- •15.14. Операция присваивания
- •15.15. Операция запятая
- •16. Описания
- •16.1. Спецификаторы класса памяти
- •16.4. Смысл описателей
- •Int count;
- •16.6. Инициализация
- •0;Неинициализированные автоматические и регистровые перемен-
- •17.7. Оператор switch
- •18.1. Внешнее определение функции
- •19.1. Лексическая область действия
- •19.2. Область действия внешних идентификаторов
- •24. Соображения о переносимости
- •28. Тип перечисления
- •29. Таблица изображений непечатных символов языка "c".
16.1. Спецификаторы класса памяти
Ниже перечисляются спецификаторы класса памяти:
Спецификатор-класса-памяти:
AUTO
STATIC
EXTERN
REGISTER
TYPEDEF
Спецификатор TYPEDEF не реализует памяти и называется
"спецификатором класса памяти" только по синтаксическим со-
ображениям; это обсуждается в п. 16.8. Смысл различных клас-
сов памяти был обсужден в п. 12.
Описания AUTO, STATIC и REGISTER служат также в качестве
определений в том смысле, что они вызывают резервирование
нужного количества памяти. В случае EXTERN должно присутст-
вовать внешнее определение (п. 18) Указываемых идентификато-
ров где-то вне функции, в которой они описаны.
Описание REGISTER лучше всего представлять себе как опи-
сание AUTO вместе с намеком компилятору, что описанные таким
образом переменные будут часто использоваться. Эффективны
только несколько первых таких описаний. Кроме того, в регис-
трах могут храниться только переменные определенных типов;
на PDP-11 это INT, CHAR или указатель. Существует и другое
ограничение на использование регистровых переменных: к ним
нельзя применять операцию взятия адреса &. При разумном ис-
пользовании регистровых описаний можно ожидать получения
меньших по размеру и более быстрых программ, но улучшение в
будущем генерирования кодов может сделать их ненужными.
Описание может содержать не более одного спецификатора
класса памяти. Если описание не содержит спецификатора клас-
са памяти, то считается, что он имеет значение AUTO, если
описание находится внутри некоторой функции, и EXTERN в про-
тивном случае. исключение: функции никогда не бывает автома-
тическими.
16.2. Спецификаторы типа
Ниже перечисляются спецификаторы типа.
Спецификатор-типа:
CHAR
SHORT
INT
LONG
UNSIGNED
FLOAT
DOUBLE
спецификатор-структуры-или-объединения
определяющее-тип-имя
Слова LONG, SHORT и USIGNED можно рассматривать как при-
лагательные; допустимы следующие комбинации:
SHORT INT
LONG INT
USIGNED INT
LONG FLOAT
Последняя комбинация означает то же, что и DOUBLE. В осталь-
ном описание может содержать не более одного спецификатора
типа. Если описание не содержит спецификатора типа, то счи-
тается, что он имеет значение INT.
Спецификаторы структур и объединений обсуждаются в п.
16.5; Описания с определяющими тип именами TYPEDEF обсужда-
ются в п. 16.8.
16.3. Описатели
Входящий в описание список описателей представляет собой
последовательность разделенных запятыми описателей, каждый
из которых может иметь инициализатор.
Список-описателей:
инициализируемый-описатель
инициализируемый-описатель, список-описателей
инициализируемый-описатель:
описатель-инициализатор
необ
Инициализаторы описываются в п. 16.6. Спецификаторы и описа-
ния указывают тип и класс памяти объектов, на которые ссыла-
ются описатели. Описатели имеют следующий синтаксис:
описатель:
идентификатор
( описатель )
* описатель
описатель ()
описатель [константное-выражение
необ]
Группирование такое же как и в выражениях.