没有标签的结构

时间:2014-09-16 14:46:28

标签: c struct

如果我声明这样的结构:

struct
{
   int a;
   char b;
} ident;

那个结构有类型吗? (即未指定的类型,默认类型等)。

相反,如果我声明一个结构如:

struct J
{
  int a;
  char b;
} ident; 

我们可以说identstruct J类型的结构变量。

1 个答案:

答案 0 :(得分:5)

struct { int a; char b; } ident;

ident具有“匿名结构类型”,您将无法声明另一个相同类型的变量 *)。也就是说,两个匿名结构类型永远不兼容。例如,如果你这样做了,

struct { int a; char b; } ident2;

之后,identident2会有不同(虽然相同)的类型和

之类的作业
ident2 = ident;

将违反约束(编译器必须提供诊断消息并且可能拒绝编译,大多数编译器可能会这样做。)


*)有些编译器有扩展允许它。例如,使用Gcc,您可以执行以下操作:

typeof(ident) ident2 = ident;