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