6

我很好奇 C 中这种行为的动机。是故意的还是偶然的?

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

typedef struct tpoint Point; // point is a type name.

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

4

2 回答 2

4

这是一个命名空间的事情。这样,我可以拥有struct a, enum a, union a, 并且没有一个是模棱两可的。在设计可能具有相似类型名称的框架时,它会有所帮助,但它会很快让人感到困惑。

于 2013-03-25T22:09:06.480 回答
0

在阅读The Development of the C Language时,当 Dennis Ritchie 讨论Embryonic C时,他描述了他的意图struct

我希望该结构不仅可以表征抽象对象,还可以描述可能从目录中读取的位集合。

本节主要讨论这个想法是如何导致引入“数组<->指针等效”的。但是,它确实说明了 C 的低级性质(astruct代表“位集合”)。

相比之下,C++ 使用 astruct作为 的一种同义词class,但一切都是公开的。Aclass实际上是面向对象编程中的一个概念,其中将其标记视为一种类型更为自然。

于 2013-03-25T22:32:32.897 回答