C语言中变量与结构体标签同名是否符合语法规范?
在C语言中,变量名可以和结构体标签同名吗?
当然可以!这种写法完全符合C语言的标准规范,不会有任何问题。
C语言里的命名空间是分类型的,简单来说:
- 结构体、联合体、枚举的标签(就是
struct/union/enum后面跟着的名字)属于单独的一个命名空间 - 普通变量、函数名、
typedef定义的名字属于另一个命名空间
这意味着,结构体标签和普通变量/成员变量的名字即使完全一样,也不会产生命名冲突——编译器能清楚地区分它们的用途。
回到你的示例代码:
struct sth { char *a; int b; }; struct asdf { struct sth sth; // 此处的第二个sth完全合规 };
这里的第一个sth是结构体的标签,第二个sth是struct asdf的成员变量名,两者属于不同的命名空间,编译器会正确识别:struct sth用来指定成员的类型,后面的sth是这个成员的名字。
甚至你还可以在全局或局部作用域里直接定义:
struct sth sth; // 同样合法,左边的sth是标签,右边的是变量名
需要注意的是,虽然语法上允许,但这种写法可能会让阅读代码的人产生混淆,所以如果团队有代码风格规范,可能会建议避免这种命名方式,提升代码的可读性。
内容的提问来源于stack exchange,提问作者Sato
相关产品推荐
相关产品推荐

