C 类型说明符

声明中的类型说明符定义变量或函数声明的类型。

语法

type-specifiervoidcharshortintlongfloatdoublesignedunsignedstruct-or-union-specifierenum-specifiertypedef-name

signed charsigned intsigned short int 和 signed long int 类型以及它们对应的 unsignedenum 一起称为“整型”类型。 floatdoublelong double 类型说明符称为“浮动”或“浮点”类型。 可在变量或函数声明中使用任何整型或浮点型说明符。 最初,如果在声明中没有提供 type-specifier,则将其视为 int。 Microsoft 编译器不再接受默认的 int 声明。

可选关键字 signedunsigned 可位于任何整型类型的前面或后面(enum 除外),还可以单独用作类型说明符(在这种情况下,它们分别被理解为 signed intunsigned int)。 单独使用时,关键字 int 被假定为 signed。 单独使用时,关键字 longshort 被理解为 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 声明中所述。 有关每个类型的大小的信息,请参阅基本类型的存储

请参阅

声明和类型
typeof, __typeof__ (C23)
typeof_unqual, __typeof_unqual__ (C23)