LuaJit预定义结构

时间:2017-12-06 06:50:05

标签: struct lua ffi luajit

我试图在Lua中制作一些依赖于彼此的结构。但我在做这件事时遇到了问题。无论如何,我可以预先定义Foo作为一个空结构并在之后定义它吗?

感谢。

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

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

1 个答案:

答案 0 :(得分:2)

这不是LuaJIT和FFI特有的问题,而是如何在C中声明相互依赖的数据结构和函数。

C要求在使用之前定义函数。例如:

int foo() {
    bar();
}

int bar() {
    return 42;
}

要解决此问题,必须在文件开头声明函数bar()。函数的行为可以在以后定义。

int bar();

int foo() {
    bar();
}

int bar() {
    return 42;
}

同样,您需要在Foo中使用之前声明Bar。另请注意,可以将所有C定义放在同一个块中。

ffi.cdef[[
   typedef struct Foo Foo;

   typedef struct {
      Foo* Foo;
   } Bar;

   typedef struct {
      Bar* bar;
   } Foo;
]]