【问题标题】:C Struct Formatting/aliasC结构格式/别名
【发布时间】:2015-03-10 01:55:12
【问题描述】:

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

typedef struct tActiveObject *testActiveObjectPtr;

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

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

谢谢。

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/1543713/… 请参考 tristopia 的回答,我希望它能解释您需要了解的内容。
  • @PawełDuda Nah,不是重复的,因为该链接没有解释第一个 typedef 或 struct 标记等。事实上,这段代码根本没有任何意义,请参阅下面的答案.
  • @PawełDuda 谢谢,但这个答案只能部分解决我的问题。不过仍然可以帮助我更好地了解情况。

标签: c struct embedded


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多