typedef
使用情况:
struct tagPOINT
{
int x;
int y;
};
typedef struct tagPOINT MyPoint;
MyPoint point = {1, 2};
您看到此行代码:typedef struct tagPOINT MyPoint;
为什么typedef
可以区分代码,然后分成struct tagPOINT
和MyPoint
,而不是struct
和tagPOINT MyPoint
?
为什么
typedef
可以区分代码然后分成struct tagPOINT
和MyPoint
,而不是struct
和tagPOINT MyPoint
?
因为这是typedef
的工作方式。
语句的最后一个词MyPoint
是您要定义的类型同义词,开始时的原义typedef
词表明您正在执行类型定义,并且介于两者之间的所有内容都是您所定义的类型正在用来定义同义词。
这是珍妮特和约翰的解释,标准(C11 6.7.8 Type definitions
)稍有详细,但是像大多数标准文件一样,它比较干燥,有时甚至超出您的需要。
如果您do想要标准文本:
typedef T type_ident;
type_ident D;
type_ident
被定义为typedef
名称,其类型由T
中的声明说明符指定(称为T
),并且D
中的标识符具有类型derived-declaratortype-list T
,其中derived-declarator-type-list
为由D
的声明者指定。
个人,我更喜欢可读的版本:-)
typedef
关键字用作语法中的存储类说明符:
typedef struct tagPOINT MyPoint;
换句话说,从句法上讲,它在短语结构中与extern
或static
占据相同的位置:
extern struct tagPOINT MyPoint;
在这里,我们有了基本的词组结构,这取决于我的记忆,而不是一个ISO文档:
<storage-class-specifier> <specifier-qualifier-list> <declarator> ;
[typedef
是存储类说明符列表,struct tagPOINT
是包括说明符限定符列表的类型说明符,MyPoint
是声明符。
您的C编译器的解析器根据语法对所有这些信息进行分类。
换句话说,typedef
不是某种命令语言中的某种命令,必须以某种ad hoc方式对其参数进行分析。
在C语法中,在struct
关键字之后可以出现的唯一标记是identifier