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
我是 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