我很好奇 C 中这种行为的动机。是故意的还是偶然的?
struct tpoint // tpoint is not a type name
{
int x, y;
};
typedef struct tpoint Point; // point is a type name.
我想知道为什么 Ritchie 或标准委员会选择了这种行为。
我很好奇 C 中这种行为的动机。是故意的还是偶然的?
struct tpoint // tpoint is not a type name
{
int x, y;
};
typedef struct tpoint Point; // point is a type name.
我想知道为什么 Ritchie 或标准委员会选择了这种行为。
这是一个命名空间的事情。这样,我可以拥有struct a
, enum a
, union a
, 并且没有一个是模棱两可的。在设计可能具有相似类型名称的框架时,它会有所帮助,但它会很快让人感到困惑。
在阅读The Development of the C Language时,当 Dennis Ritchie 讨论Embryonic C时,他描述了他的意图struct
:
我希望该结构不仅可以表征抽象对象,还可以描述可能从目录中读取的位集合。
本节主要讨论这个想法是如何导致引入“数组<->指针等效”的。但是,它确实说明了 C 的低级性质(astruct
代表“位集合”)。
相比之下,C++ 使用 astruct
作为 的一种同义词class
,但一切都是公开的。Aclass
实际上是面向对象编程中的一个概念,其中将其标记视为一种类型更为自然。