我是C的初学者,我在头文件中遇到了一些代码,我不确定它使用的样式及其含义。
typedef struct tActiveObject *testActiveObjectPtr;
typedef struct tActiveObject {
ActiveObject ao;
int state;
} testActiveObject, *testActiveObjectPtr;
为什么我们需要创建一个指针作为别名,testActiveObject
和*testActiveObjectPtr
?这只是一些我不知道的C风格吗?
感谢。
答案 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