是否可以命名与结构标记同名的变量?例如:
struct sth {
char *a;
int b;
};
struct asdf {
struct sth sth; // is second sth OK??
};
答案 0 :(得分:6)
结构标记位于'标记中。名称空间,与工会和枚举共享。这完全独立于普通标识符'名称空间(保存typedef名称和变量名称和函数名称),以及每个结构的成员名称命名空间。
这意味着你可以拥有:
struct sth // DO
{ // NOT
int sth; // DO
} sth; // THIS!
这声明了sth
类型的结构变量struct sth
,其中一个成员名为sth
。
编译器可以保持这一切;你可能不会,也许不应该。换句话说,虽然你可以编写这样的代码,但实际上这样做是一个非常糟糕的主意。