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

时间:2013-03-25 22:07:37

标签: c

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

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

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

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

2 个答案:

答案 0 :(得分:4)

这是一个命名空间。这样,我就可以拥有struct aenum aunion a,而且这些都不含糊。它在设计可能具有相似类型名称的框架时会有所帮助,但它可能会让您感到困惑。

答案 1 :(得分:0)

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

  

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

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

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