typedef说明符
typedef 声明引入,在其范围内,则成为声明中的 类型声明 部分给定的类型的同义词的名称。
typedef type-declaration synonym;
备注
可以使用 typedef 声明构造更短或更有意义的名称该语言中定义的类型或对于声明的类型。Typedef 名称可以封装能更改的实现详细信息。
与 类相比, struct、 联合和 enum 说明, typedef 声明不引入新 --它们引入新名称现有类型。
Typedef 命名共享与普通标识符的 命名空间 。因此,过程可以由同一个名称的 typedef 名称和局部范围标识符。
有关更多信息,请参见:
示例
// typedef_specifier1.cpp
typedef char FlagType;
int main()
{
}
void myproc( int )
{
int FlagType;
}
在声明局部范围标识符的名称和 typedef 相同,或者时,声明一个结构或联合的成员时在同一范围或在内部范围,必须指定类型说明符。例如:
typedef char FlagType;
const FlagType x;
要重用 FlagType 名称标识符,必须提供结构成员或联合成员,该类型:
const int FlagType; // Type specifier required
添加是不够的
const FlagType; // Incomplete specification
因为 FlagType 执行是类型的一部分,重新声明不是的标识符。本文档将采用一个非法声明。
int; // Illegal declaration
可以声明与 typedef 的任何类型,包括指针、函数和数组类型。可以声明一个 typedef 名称指向结构或联合类型,在定义结构或联合类型之前,,只要该定义有必要和说明相同。
示例
为 typedef 声明的一个用途是使声明多个统一和压缩。例如:
typedef char CHAR; // Character type.
typedef CHAR * PSTR; // Pointer to a string (char *).
PSTR strchr( PSTR source, CHAR target );
typedef unsigned long ulong;
ulong ul; // Equivalent to "unsigned long ul;"
若要使用 typedef 指定基本和类型派生的同一声明,可以使用逗号分隔声明。例如:
typedef char CHAR, *PSTR;
下面的示例对返回值和采用两个 int 参数的函数不提供类型 DRAWF :
typedef void DRAWF( int, int );
在上面 typedef 语句后,声明
DRAWF box;
与该声明等效
void box( int, int );
typedef 通常将与 struct 声明和命名用户定义的类型:
// typedef_specifier2.cpp
#include <stdio.h>
typedef struct mystructtag
{
int i;
double f;
} mystruct;
int main()
{
mystruct ms;
ms.i = 10;
ms.f = 0.99;
printf_s("%d %f\n", ms.i, ms.f);
}