Giao diện với cấu trúc và liên hiệp ẩn danh với c2hs


100

Làm thế nào để mã hóa đoạn mã C này trong một tệp .chs để c2hs có thể biến đổi nó thành một thứ gì đó tương đối đẹp?

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
Sẽ hiệu quả hơn nếu bạn thực sự cố gắng giải quyết vấn đề trước, sau đó đưa ra các câu hỏi cụ thể về ngôn ngữ và / hoặc công cụ. Những câu hỏi nằm ở trung tâm của mọi sự nhầm lẫn và tránh sự phức tạp không cần thiết của một ứng dụng cụ thể, thậm chí còn tốt hơn. Ví dụ: bạn có thể hỏi về một cấu trúc đơn giản và / hoặc về một liên hợp đơn giản, sau đó áp dụng kiến ​​thức đó vào vấn đề của bạn.
Thomas M. DuBuisson

2
@ ThomasM.DuBuisson Tôi nghĩ bạn đưa ra một quan điểm hợp lý. Tôi sẽ giải quyết vấn đề này xa hơn một chút.

@unsymbol bạn có câu trả lời cho câu hỏi của mình không? Vui lòng xem xét thêm nó ở đây :)
alfakini

1
Hi unsymbol, bất kỳ tin tức về điều này? Bạn đã làm cho nó hoạt động chưa và làm thế nào?
Casper Thule Hansen

Câu trả lời:


1

Làm thế nào về điều này: thay đổi mã để bạn đặt tên cho các thành viên. Bố cục trong bộ nhớ giống nhau để nó tương thích với hệ nhị phân. Bạn sẽ phải thực hiện bản vá này cho mỗi phiên bản của 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;
    };
};
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.