Спецификаторы типов C
Спецификаторы типа в объявлениях определяют тип объявления переменной или функции.
Синтаксис
спецификатор-типа:
voidchar
short
целое число
long
float
double
signed
без знака
спецификатор-struct-или-union
спецификатор-enum
имя-typedef
Типы signed char, signed int, signed short int и signed long int вместе с аналогичными типами unsigned и enum называются "целочисленными" типами. Спецификаторы типов float, double и long double называются типами "с плавающей запятой". Любой спецификатор целочисленного типа или типа с плавающей запятой можно использовать в объявлении переменной или функции. Если спецификатор-типа в объявлении отсутствует, для него принимается значение int.
Необязательные ключевые слова signed и unsigned могут указываться перед или после любого целочисленного типа, кроме enum, а также могут использоваться сами по себе в качестве спецификаторов типа — в этом случае они понимаются как signed int и unsigned int, соответственно. При использовании только ключевого слова int принимается, что это тип signed. Если ключевые слова long и short используются отдельно, они воспринимаются как long int и short int.
Типы перечисления считаются базовыми типами. Спецификаторы типов для типов перечисления рассматриваются в разделе Объявления перечислений.
Ключевое слово void используется для трех целей: задание типа возвращаемого значения функции, задание списка типов аргументов для функции, не принимающей аргументов, и задание указателя на неуказанный тип. Тип void можно использовать для объявления функций, не возвращающих никаких значений, или для объявления указателя на неуказанный тип. Сведения о ключевом слове void, когда в скобках после имени функции указано только это ключевое слово, см. в разделе Аргументы.
Блок, относящийся только к системам Microsoft
Проверка типов теперь соответствует требованиям ANSI, то есть типы short и int являются разными типами. Например, это является переопределением в компиляторе Microsoft C, которое принималось предыдущими версиями компилятора.
int myfunc();
short myfunc();
Следующий пример также создает предупреждение о косвенном обращении к разным типам:
int *pi;
short *ps;
ps = pi; /* Now generates warning */
Компилятор Microsoft C также выдает предупреждения в случае разного использования знака (типы со знаком и без знака). Например:
signed int *pi;
unsigned int *pu
pi = pu; /* Now generates warning */
Выражения типа void вычисляются для учета побочных эффектов. Невозможно каким-либо образом использовать (несуществующее) значение выражения типа void; также невозможно преобразовать выражение типа void (с помощью явного или неявного преобразования) в любой тип, кроме void. При использовании в контексте, в котором требуется выражение void, выражения любого другого типа его значение игнорируется.
Для обеспечения соответствия спецификации ANSI тип void** не может использоваться как тип int**. В качестве указателя на неуказанный тип можно использовать только тип void*.
Завершение блока, относящегося только к системам Microsoft
С помощью объявлений typedef можно создавать дополнительные спецификаторы типа, как описано в разделе Объявления typedef. Сведения о размерах каждого типа см. в разделе Хранилище базовых типов.