【问题标题】: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;
    ]]
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2014-08-08
      • 2022-10-06
      • 2020-09-15
      • 2019-05-17
      相关资源
      最近更新 更多