使用c2hs与结构和匿名联合进行交互
如何将一个.chs文件中的C代码块编码,以便c2hs可以将其转换为相对较好的?
typedef enum { MONOME_BUTTON_UP = 0x00, MONOME_BUTTON_DOWN = 0x01, MONOME_ENCODER_DELTA = 0x02, MONOME_ENCODER_KEY_UP = 0x03, MONOME_ENCODER_KEY_DOWN = 0x04, MONOME_TILT = 0x05, /* update this if you add event types */ MONOME_EVENT_MAX = 0x06 } monome_event_type_t; typedef struct monome monome_t; /* opaque data type */ typedef struct monome_event monome_event_t; typedef void (*monome_event_callback_t) (const monome_event_t *event, void *data); struct monome_event { monome_t *monome; monome_event_type_t event_type; /* __extension__ for anonymous unions in gcc */ __extension__ union { struct { unsigned int x; unsigned int y; } grid; struct { unsigned int number; int delta; } encoder; struct { unsigned int sensor; int x; int y; int z; } tilt; }; };
怎么样:改变代码,以便您命名的成员。 内存中的布局是相同的,所以它将是二进制兼容的。 你将不得不为每个版本的lib做这个补丁。
struct monome_event { monome_t *monome; monome_event_type_t event_type; /* __extension__ for anonymous unions in gcc */ __extension__ union { struct me_grid { unsigned int x; unsigned int y; } grid; struct me_encoder { unsigned int number; int delta; } encoder; struct me_tilt { unsigned int sensor; int x; int y; int z; } tilt; }; };