LuaJit 预定义结构

我正在尝试像这样在 Lua 中制作一些相互依赖的结构。但我在做的过程中遇到了问题。有没有办法将 Foo 预定义为空结构,然后在之后定义它?

谢谢。

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

ffi.cdef [[
    typedef struct {
        Bar* bar;
    } Foo;
]]
点赞
用户134758
用户134758

这不是 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;
]]
2017-12-07 14:09:58