如果我声明这样的结构:
struct
{
int a;
char b;
} ident;
那个结构有类型吗? (即未指定的类型,默认类型等)。
相反,如果我声明一个结构如:
struct J
{
int a;
char b;
} ident;
我们可以说ident
是struct J
类型的结构变量。
答案 0 :(得分:5)
在
struct { int a; char b; } ident;
ident
具有“匿名结构类型”,您将无法声明另一个相同类型的变量 *)。也就是说,两个匿名结构类型永远不兼容。例如,如果你这样做了,
struct { int a; char b; } ident2;
之后,ident
和ident2
会有不同(虽然相同)的类型和
ident2 = ident;
将违反约束(编译器必须提供诊断消息并且可能拒绝编译,大多数编译器可能会这样做。)
*)有些编译器有扩展允许它。例如,使用Gcc,您可以执行以下操作:
typeof(ident) ident2 = ident;