【发布时间】:2020-08-13 16:52:27
【问题描述】:
我刚刚发现gcc 和clang 都接受以下代码:
typedef int blah;
struct s { char blah; };
但是,他们拒绝这样做,因为类型名称被用作标识符:
typedef int blah;
char blah;
这是否意味着 typedef 的名称在结构定义中不可见?不,因为这在 gcc 和 clang 中都有效:
typedef int blah;
struct s { blah blah; }
我正在查看 C99 标准,但找不到任何解释为什么 typedef 的名称可以用作结构成员的名称,但不能用作同一范围内的变量的名称。
有人能解释这是为什么吗?参考任何适用的标准将不胜感激。
【问题讨论】:
-
第一个sn-p
blah是一个结构体成员名,第二个sn-pblah是一个变量名,这是两个非常不同的东西。 -
This question 可能会回答您自己的问题,尽管它的质量不佳。
-
和
int var; struct foo bar; bar.var = var;一样的原因 -
@Jabberwocky 感谢您的评论。您是否知道任何 C 标准中是否有任何内容阐明了这两个事物在相同范围内已经定义类型的名称的行为方式?我正在阅读标准,并没有看到任何表明会有任何差异的内容。
-
请说清楚,gcc 和 clang 接受还是拒绝?