2016-09-15 17 views
1

私は、ctypesモジュールを使用して、Pythonで動的ライブラリへのアクセスを作成しようとしています。私のPythonの実装でtydefされた構造のいくつかを複製している間、私は何が起こっているのか困ったコードを見つけました。基本的には私が持っているものは、ヘッダファイルに構造体定義のポインタを持つ列挙体

enum foo { 
    a, 
    b, 
    c, 
}; 

typedef struct barStruct bar; 

struct barStruct{ 
    enum foo (*lem)(); 
    enum foo (*baz)(bar *next); 
} 

です。

私は構造体定義の2つの列挙型呼び出しを理解しようとしています。最初のものはlemというポインタを作成していましたが、これは列挙に含まれる値を指し示さなければならないと思いました。(つまり、最後には閉じかっこを無視していました。 2番目のものに気付いたときに、かっこの中に別のポインタを入れて、何が起こっているのか本当に混乱し、最初のものが何を意味するのか疑問に思った。

この質問には既に回答があります(私はそれが正しいと思いますが)残念ながら、私が必要とするものを効果的に検索する方法について考えることはできません。

答えて

3

これらは "enum呼び出し"ではなく、構造体の2つのメンバー、関数へのポインタであるメンバーを宣言しています。

enum foo (*lem)(); 

例えば

は、構造部材の引数の不確定数を取る関数へのポインタである変数lem、及び戻るfoo列挙を宣言する。

+0

ああ、それは理にかなっています。したがって、2番目の関数は、bar型のstructへのポインタを入力するfoo列挙型を返す関数へのポインタですか? – Andrew

+2

@Andrewそれは正しいです。 –

関連する問題