我试图在Lua中制作一些依赖于彼此的结构。但我在做这件事时遇到了问题。无论如何,我可以预先定义Foo作为一个空结构并在之后定义它吗?
感谢。
ffi.cdef[[
typedef struct {
Foo* foo;
} Bar;
]]
ffi.cdef[[
typedef struct {
Bar* bar;
} Foo;
]]
答案 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;
]]