C 结构 Formatting/alias

C Struct Formatting/alias

我是 C 的初学者,我在头文件中遇到了一些代码,我不确定它使用的是什么样式以及它的含义。

typedef struct tActiveObject *testActiveObjectPtr;

typedef struct tActiveObject {
    ActiveObject ao;
    int state;
} testActiveObject, *testActiveObjectPtr;

为什么我们需要创建一个指针作为别名,即 testActiveObject*testActiveObjectPtr?这只是我不知道的一些 C 风格吗?

谢谢。

如果这两个 typedef 出现在同一个头文件中,那么代码就没有任何意义。在那种情况下,第一个 typedef 是完全多余的,整个代码可以替换为

typedef struct {
    ActiveObject ao;
    int state;
} testActiveObject, *testActiveObjectPtr;

否则,如果 typedef 在不同的文件中,代码可能会尝试创建指向 不完整类型 的指针,但它看起来不像是案件。 struct 标签是多余的,但闻起来也像是创建自引用结构的失败尝试。

此外,良好的编程习惯要求您永远不要将指针隐藏在 typedef 后面。

所以看起来整个代码是由一个相当困惑的人创建的,他们不太清楚自己在做什么。如果可能,把代码扔掉,换成:

typedef struct {
    ActiveObject ao;
    int state;
} testActiveObject,

...

testActiveObject* ptr; // whenever you need a pointer to this type