Yapılar ve anonim sendikalarla c2hs ile etkileşim kurma


100

Bu C kodunu bir .chs dosyasında kodlamak nasıl olur ki c2hs onu görece güzel bir şeye dönüştürebilir?

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
Önce sorunu çözmeye çalışmak, ardından dil ve / veya araçlar hakkında belirli sorularla gelmek sizin için daha üretken olacaktır. Herhangi bir karışıklığın özüne inen ve belirli bir uygulamanın gereksiz karmaşıklığını önleyen sorular daha da iyidir. Örneğin, basit bir yapı ve / veya basit bir birlik hakkında sorular sorabilir ve sonra bu bilgiyi probleminize uygulayabilirsiniz.
Thomas M. DuBuisson

2
@ ThomasM.DuBuisson Makul bir noktaya değindiğinizi düşünüyorum. Bunun üzerinde biraz daha çalışacağım.

@unsymbol sorunuz için bir cevabınız var mı? Lütfen buraya eklemeyi düşünün :)
alfakini

1
Merhaba sembolsüz, bu konuda herhangi bir haber var mı? Çalışmaya başladınız mı ve nasıl?
Casper Thule Hansen

Yanıtlar:


1

Şuna ne dersiniz: Üyeleri adlandırmak için kodu değiştirin. Hafızadaki düzen aynıdır, böylece ikili uyumlu olacaktır. Bu yamayı kitaplığın her sürümü için yapmanız gerekir.

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;
    };
};
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.