[英]Declare a Structure and a Function Reference that use Each Other
我需要在痛苦的旧C中声明一个(typedef'd)结构和一个(typedef'd)函数引用。这是我的代码:
typedef void (*monitor_calback)(monitor_data*, short int, short int, void*);
typedef struct
{
int port;
unsigned char port_state;
monitor_calback cb_high[8];
void *cb_high_data[8];
monitor_calback cb_low[8];
void *cb_low_data[8];
} monitor_data;
但是当然它不会编译,因为我们在声明函数引用时不知道结构。
我已经得到了这个,但它看起来有点混乱,有点难以阅读。
struct _monitor_data;
typedef void (*monitor_calback)(struct _monitor_data*, short int, short int, void*);
typedef struct _monitor_data
{
int port;
unsigned char port_state;
monitor_calback cb_high[8];
void *cb_high_data[8];
monitor_calback cb_low[8];
void *cb_low_data[8];
} monitor_data;
有没有更好的方法来做到这一点?
您可以在定义结构之前键入dede结构:
typedef struct _monitor_data monitor_data;
typedef void (*monitor_calback)(monitor_data*, short int, short int, void*);
struct _monitor_data
{
int port;
unsigned char port_state;
monitor_calback cb_high[8];
void *cb_high_data[8];
monitor_calback cb_low[8];
void *cb_low_data[8];
};
只要在完全定义struct _monitor_data
之前不尝试引用monitor_data
的内部结构,这将正常工作。 所有的编译器需要知道你的monitor_callback
定义是monitor_data *
是一个指向东西,所以monitor_callback
是罚款,只要编译器知道monitor_data
存在。
这种构造是在C中定义不透明类型的标准方法,你只需要取消选择你的类型而不是让它变得不透明。
你可能更喜欢以下,取决于口味:
#define monitor_data struct _monitor_data
typedef void (*monitor_calback)(monitor_data*, short int, short int, void*);
typedef struct _monitor_data
{
int port;
unsigned char port_state;
monitor_calback cb_high[8];
void *cb_high_data[8];
monitor_calback cb_low[8];
void *cb_low_data[8];
};
因为typedef
行为没有更好的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.