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あなたの質問に対する答えはありますか?ここに追加することを検討してください:)
alfakini '13年

1
こんにちはシンボル解除、これに関するニュースはありますか?あなたはそれを機能させましたか?
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.