You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:09:42