【问题标题】:In C, can struct members use the same name as a type?在 C 中,结构成员可以使用与类型相同的名称吗?
【发布时间】:2013-03-13 22:12:11
【问题描述】:

例如,以下 C 代码是否有效?

typedef struct {
    /* ... */
} foo;

typedef struct {
    foo foo; /* Is it ok that 'foo' == 'foo'? */
} bar;

【问题讨论】:

  • 你试过编译吗?
  • 不要这样做,只是出于可读性的原因。即使声明一个字段struct foo foo 也是不可读的,即使是合法的。有一些易于理解(和猜测)的命名约定。
  • 它可以工作 (liveworkspace.org/code/3vcKtX$2),它不可读,试试foo_tFoo 之类的样式。
  • @TomerArazy 有时您会发现编译器的差异,或者有时是合法的,有时是不合法的情况。在这里尝试实际上有点错误。您将获得一种前所未有的信心,即您尝试过一次的方式就是它的工作方式。

标签: c syntax struct


【解决方案1】:

是的,这是有效的 C(尽管它不可​​读,应该避免使用)。

类型标识符和结构成员标识符存在于不同的名称空间中。

参见 C99,6.2.3p1 标识符的命名空间:

[...] 不同类别的标识符有单独的名称空间,如下所示: — 标签名称(通过标签声明和使用的语法消除歧义);

——结构、联合和枚举的标签 [...]

——结构或工会的成员;每个结构或联合都有一个单独的名称 其成员的空间[...]

——所有其他标识符,称为普通标识符[...]

【讨论】:

  • 那句话没有提到typedef'd 标识符
  • @Matt typedef 标识符是普通标识符
猜你喜欢
  • 1970-01-01
  • 2012-10-08
  • 2021-02-13
  • 2012-04-21
  • 2016-09-09
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多