2017-12-06 12 views
1

私はLuaのように互いに依存するいくつかの構造体を作ろうとしています。しかし、私は問題を抱えています。とにかくFooを空の構造体として事前定義し、後で定義することはできますか?LuaJitはあらかじめ構造体を定義しています

ありがとうございました。

ffi.cdef[[ 
    typedef struct { 
     Foo* foo; 
    } Bar; 
]] 

ffi.cdef[[ 
    typedef struct { 
     Bar* bar; 
    } Foo; 
]] 

答えて

2

これはLuaJITの問題の特定とFFIが、どのようにC.

で相互に依存するデータ構造と機能を宣言するC関数がそれを使用する前に定義されていることが必要ではありません。たとえば、この問題を解決するために

int foo() { 
    bar(); 
} 

int bar() { 
    return 42; 
} 

は、ファイルの先頭に機能bar()を宣言する必要があります。関数の動作は後で定義することができます。

int bar(); 

int foo() { 
    bar(); 
} 

int bar() { 
    return 42; 
} 

同様に、あなたはBarで使用する前にFooを宣言する必要があります。また、すべてのC定義を同じブロックに入れることも可能です。

ffi.cdef[[ 
    typedef struct Foo Foo; 

    typedef struct { 
     Foo* Foo; 
    } Bar; 

    typedef struct { 
     Bar* bar; 
    } Foo; 
]] 
関連する問題