typedef 说明符
typedef 声明在其作用域内引入一个名称,该名称成为声明的“类型声明”部分给定的类型的同义词。
typedef type-declaration synonym;
备注
使用 typedef 声明,可以为已由语言定义的类型和对您已声明的类型构造更短和更有意义的名称。 Typedef 名称可以封装可能更改的实现详细信息。
与 class、struct、union 和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;
以下示例为函数提供类型 DRAWF,不返回值并采用两个 int 参数:
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);
}