Haskell 使用c2hs与结构和匿名联合接口
如何将这段C代码编码到一个.chs文件中,以便c2hs可以将其转换为相对较好的代码Haskell 使用c2hs与结构和匿名联合接口,haskell,c2hs,Haskell,C2hs,如何将这段C代码编码到一个.chs文件中,以便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_TI
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;
};
};
对于您来说,首先尝试解决问题,然后提出有关语言和/或工具的具体问题,会更有成效。如果问题成为任何混乱的核心,并避免特定应用程序不必要的复杂性,那就更好了。例如,您可以询问一个简单的结构和/或一个简单的联合,然后将这些知识应用于您的问题。@ThomasM.DuBuisson我认为您的观点是合理的。我将进一步研究这个问题。@unsymbol你有问题的答案吗?请考虑在这里加上:“嗨,没有符号,有什么新闻吗?”你是怎么做到的?