Q这两个声明有什么区别?
struct x1 { ... }; typedef struct { ... } x2;
A第一种形式声明一个 结构标签;第二种声明一个 typedef。主要区别在于第二种声明是一种更抽象的类型——它的用户不一定知道它是一个结构,并且在声明它的实例时不需要使用关键字struct。
x2 b;
另一方面,用标签声明的结构必须用
struct x1 a;形式定义。[脚注]
(也可以两者兼顾
typedef struct x3 { ... } x3;如果标签和 typedef 使用相同的名称,这是合法的,尽管可能晦涩难懂,因为它们存在于单独的命名空间中。请参阅问题 1.29。)