Поделиться через


Спецификаторы типов C

Спецификаторы типа в объявлениях определяют тип объявления переменной или функции.

Синтаксис

  • спецификатор-типа:
    void

    char

    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. Сведения о размерах каждого типа см. в разделе Хранилище базовых типов.

См. также

Основные понятия

Объявления и типы