【问题标题】:Circular definition in CC中的循环定义
【发布时间】:2011-09-21 15:46:38
【问题描述】:

我写的是:

typedef enum _MyStatus
{
    MY_STATUS_OK = 0,
    MY_STATUS_GENERAL_ERROR = -1,

} MyStatus;

typedef MyStatus (*MyCallback)(MySettings *settings);

typedef struct _MySettings
{
    MyCallback callback;
} MySettings

但是,它不会编译,因为在定义 MyCallback 时它不知道 MySettings。如果我交换 MySettings 和 MyCallback,情况会相反:MySettings 不会知道 MyCallback。

这类问题在 C 中的处理一般如何?

谢谢!

【问题讨论】:

  • 注意你可以这样声明一个枚举:`enum MyStatus { MY_STATUS_OK = 0, MY_STATUS_GENERAL_ERROR = -1, };
  • 是的,但我总是得写成enum MyStatus,不是吗?
  • 没有。我总是以这种方式声明我的枚举,并且在使用它们时从不指定枚举。也许在 ANSI C 中没有那么简单,但在现代 C++ 中,它可以正常工作。
  • 在 C++ 中肯定可以工作。 structs 也一样。在这方面 C 和 C++ 不同。

标签: c struct typedef definition


【解决方案1】:

把这条线放在最上面怎么样:

typedef struct _MySettings MySettings;

这个C FAQ: How can I define a pair of mutually referential structures? 可能有用。

【讨论】:

  • 谢谢!而不是typedef struct _MySettings {...} MySettings;,我应该使用struct _MySettings {...};。奇怪的是,我似乎不能只使用MySettings {...};
猜你喜欢
  • 2014-05-20
  • 2014-08-15
  • 1970-01-01
  • 2017-03-13
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多