为什么struct标签不是C中的类型名?

Ray*_*ery 6 c

我对C中这种行为的动机感到好奇.是故意还是意外?

struct tpoint // tpoint is not a type name
{
    int x, y;
};

typedef struct tpoint Point; // point is a type name.
Run Code Online (Sandbox Code Playgroud)

我想知道为什么Ritchie或标准委员会选择了这种行为.

Ric*_*III 4

这是一个命名空间的事情。这样我就可以有struct a、、、,而且没有一个是含糊的enum aunion a它在设计可能具有相似类型名称的框架时很有帮助,但很快就会变得混乱。

  • 如果我没记错的话,标签命名空间在结构、联合和枚举之间**共享**,即您不能使用相同的标签名称定义所有三个甚至两个。 (3认同)