在结构中声明匿名结构有什么用?

时间:2010-05-03 09:48:44

标签: c structure

在结构中定义匿名结构有什么用?什么时候应该使用这个概念?

2 个答案:

答案 0 :(得分:8)

我有时会用它来创建一些数据之间的联合:

typedef union {
    struct {
        int x, y, z;
    };
    int elements[3];
} Point;

通过这种方式,我可以使用elements轻松遍历坐标,但也可以使用较短的格式xyz代替elements[0]等。

答案 1 :(得分:3)

如果您只想表达两个值属于一起,但绝不需要将特定分组作为独立类型,那就完全没了问题。

它可能被视为有点迂腐,倾向于过度工程的一面,但它也可以被视为增加清晰度和结构的重要方法。

考虑:

struct State
{
  Point position;
  float health;
  int level;
  int lives_left;
  int last_checkpoint;
  char filename[32];
};

struct State
{
  struct
  {
  Point position;
  float health;
  int level;
  int lives_left;
  }               player;
  struct {
  int last_checkpoint;
  char filename[32];
  }               level;
}

最后一个案例有点难以缩进,但它确实以非常明确的方式表达了某些值与玩家相关联,而某些值与该级别相关联。