【问题标题】:Structure without a tag没有标签的结构
【发布时间】:2014-09-16 14:46:28
【问题描述】:

如果我声明一个这样的结构:

struct
{
   int a;
   char b;
} ident;

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

如果我声明这样的结构:

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

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

【问题讨论】:

  • 它有一个类型,但是这个类型没有名字。

标签: c struct


【解决方案1】:

之后

struct { int a; char b; } ident;

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

struct { int a; char b; } ident2;

之后,identident2 将是不同的(尽管相同)类型和类似的赋值

ident2 = ident;

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


*) 一些编译器具有允许它的扩展。例如,使用 Gcc,您可以:

typeof(ident) ident2 = ident;

【讨论】:

  • 如果您的编译器具有(非标准)typeof 扩展名,您可以声明另一个相同类型。
  • @JamesMcLaughlin:感谢您的建议!已编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2018-02-21
  • 2014-08-08
  • 2019-04-28
  • 2019-11-08
相关资源
最近更新 更多