C结构格式/别名

时间:2015-03-10 01:55:12

标签: c struct embedded

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

typedef struct tActiveObject *testActiveObjectPtr;

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

如果这两个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