命名与结构标记同名的变量是否可以?

时间:2018-03-16 05:11:42

标签: c

是否可以命名与结构标记同名的变量?例如:

struct sth {
  char *a;
  int b;
};

struct asdf {
  struct sth sth; // is second sth OK??
};

1 个答案:

答案 0 :(得分:6)

结构标记位于'标记中。名称空间,与工会和枚举共享。这完全独立于普通标识符'名称空间(保存typedef名称和变量名称和函数名称),以及每个结构的成员名称命名空间。

这意味着你可以拥有:

struct sth       // DO
{                // NOT
    int sth;     // DO
} sth;           // THIS!

这声明了sth类型的结构变量struct sth,其中一个成员名为sth

编译器可以保持这一切;你可能不会,也许不应该。换句话说,虽然你可以编写这样的代码,但实际上这样做是一个非常糟糕的主意。