【问题标题】:LuaJit predefine structLuaJit 预定义结构
【发布时间】:2017-12-06 06:50:04
【问题描述】:
我正在尝试像这样在 Lua 中创建一些相互依赖的结构。但我在做这件事时遇到了问题。无论如何我可以将 Foo 预定义为一个空结构并在之后定义它吗?
谢谢。
ffi.cdef[[
typedef struct {
Foo* foo;
} Bar;
]]
ffi.cdef[[
typedef struct {
Bar* bar;
} Foo;
]]
【问题讨论】:
标签:
struct
lua
ffi
luajit
【解决方案1】:
这不是 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;
]]