c2hs를 사용하여 구조체 및 익명 공용체와 인터페이스


100

이 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_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;
    };
};

12
실제로 문제를 먼저 해결 한 다음 언어 및 / 또는 도구에 대한 구체적인 질문을하는 것이 더 생산적입니다. 혼동의 핵심이되고 특정 애플리케이션의 불필요한 복잡성을 피하는 질문이 훨씬 좋습니다. 예를 들어, 간단한 구조체 및 / 또는 간단한 공용체에 대해 질문 한 다음 해당 지식을 문제에 적용 할 수 있습니다.
Thomas M. DuBuisson 2014 년

2
@ ThomasM.DuBuisson 나는 당신이 합리적인 지적을한다고 생각합니다. 나는 이것에 대해 조금 더 작업 할 것입니다.

@unsymbol 질문에 대한 답변이 있습니까? 여기에 추가하는 것을 고려하십시오 :)
해보세요.

1
안녕하세요 unsymbol, 이것에 대한 뉴스가 있습니까? 어떻게 작동하게 하셨나요?
Casper Thule Hansen

답변:


1

방법 : 구성원의 이름을 지정하도록 코드를 변경하십시오. 메모리의 레이아웃은 동일하므로 바이너리와 호환됩니다. 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;
    };
};
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.