3

c2hscandを使用するとhsc2hs多くの作業を節約できますが、C 共用体のバインディングを作成しようとしたときに、いくつかの問題に遭遇しました。


たとえば、C 構造体が与えられた場合、

typedef struct {
      int tag;
      union {
            char a;
            double b;
      } v;
} sum_t;

c2hsc私のために次のコードを作成します:

#starttype sum_t
#field tag , CInt
#field v , 
#stoptype

vフィールドは空で生成されます。経由でツールチェーンをさらに下に行くhsc2hsと、間違った結果が得られます

data C'sum_t = C'sum_t{
  c'sum_t'tag :: CInt,
  c'sum_t'v :: 
}

今の質問は

  1. .hscバインディングを操作できるようにコードを手動で記述する正しい方法は何ですか?
  2. c2hscこれを自動的に行う方法はありますか?
4

1 に答える 1

0

c2hscbindings-dslマクロを生成するだけです。そこのドキュメントを使用すると、これらを直接記述する方法を理解できるはずです。次のようなものを検討してください...

#starttype struct sum_t
#field tag , CInt
#field v.a , CChar
#field v.b , CDouble
#stoptype

ドキュメントでは、ポインタを使用して共用体を操作する方法について説明しています。

于 2016-03-19T06:45:33.743 に答える