Язык программирования Си для персонального компьютера - страница 16
описатель представляет собой идентификатор. Для объявления массива значений специфицированного типа (см. раздел 3.4.5), либо функции, возвращающей значение специфицированного типа (см. раздел 3.5), либо указателя на значение специфицированного типа (см. раздел 3.4.6), идентификатор дополняется, соответственно, квадратными скобками, круглыми скобками или звездочкой. В одном объявлении может быть задано несколько описателей различных объектов, имеющих одинаковый класс памяти и тип.
Определения функций описаны в разделе 6.2, инициализаторы — в разделе 3.7.
Базовые типы данных
В языке Си реализован набор типов данных, называемых "базовыми" типами. Спецификации этих типов перечислены в таблице 3.1.
Таблица 3.1.
Базовые типы | Спецификация типов | |
Целые | signed char | знаковый символьный |
signed int | знаковый целый | |
signed short int | знаковый короткий целый | |
signed long int | знаковый длинный целый | |
unsigned char | беззнаковый символьный | |
unsigned int | беззнаковый целый | |
unsigned short int | беззнаковый короткий целый | |
unsigned long int | беззнаковый длинный целый | |
Плавающие | float | плавающий одинарной точности |
double | плавающий двойной точности | |
long float | длинный плавающий одинарной точности | |
long double | длинный плавающий двойной точности | |
Прочие | void | пустой |
enum | перечислимый |
Тип long float реализован только в версии 4.0 СП MSC и эквивалентен типу double. В версии 5.0 СП MSC и в СП ТС реализован тип long double, причем в версии 5.0 СП MSC и версии 1.5 СП ТС он эквивалентен типу double, а в версии 2.0 СП ТС является самостоятельным типом размером 80 битов.
Типы char, int, short и long имеют две формы — знаковую (signed) и беззнаковую (unsigned). В совокупности они образуют целый тип. Перечислимый тип также служит для представления целых значений, однако, переменная перечислимого типа может принимать значения только из набора, заданного в ее объявлении. Спецификации типов float и double относятся к плавающему типу.
Целый тип (включая перечислимый тип) и плавающий тип в совокупности образуют арифметический тип.
Тип void (пустой) имеет специальное назначение. Указание спецификации типа void в объявлении функции означает, что функция не возвращает значений. Указание типа void в списке объявлений аргументов в объявлении функции означает, что функция не принимает аргументов. Можно объявить указатель на тип void; он будет указывать на любой, т.е. неспецифицированный тип. Тип void может быть указан в операции приведения типа. Приведение значения выражения к типу void явно указывает на то, что это значение не используется. Нельзя объявить переменную типа void.
При записи спецификаций целого и плавающего типа допустимы сокращения, приведенные в таблице 3.2. Например, в целых типах ключевое слово signed может быть опущено. Если ключевое слово unsigned отсутствует в записи спецификации типа short, int или long, то тип целого будет знаковым, даже если опущено ключевое слово signed.
По умолчанию тип char всегда имеет знак. Однако существует опция компилятора языка Си, позволяющая изменить умолчание для char со знакового типа на беззнаковый. Если эта опция задана, то сокращение char имеет тот же смысл, что и unsigned char, и, следовательно, для объявления символьной переменной со знаком должно быть записано ключевое слово signed.
Таблица 3.2.
Спецификация типа | Сокращение |
signed char | char |
signed int | signed, int |
signed short int | short, signed short |
signed long int | long, signed long |
unsigned char | - |
unsigned int | unsigned |
unsigned short int | unsigned short |
unsigned long int | unsigned long |
float | - |
long float | double |
long double | double (СП MSC 5.0, СП TC 1.5) |
long double | —(СП TC 2.0) |
Примечание. В данной книге в основном используются сокращенные формы записи спецификаций типов, перечисленные в таблице 3.2; при этом предполагается, что тип char по умолчанию имеет знак.
Области значений
Область значений — это интервал от минимального до максимального значения, которое может быть представлено в переменной данного типа. В таблице 3.3 приведен размер занимаемой памяти и области значений переменных для каждого типа. Поскольку переменных типа