答案 0 :(得分:1)
使用ffi.cdef
,您可以在 FFI C命名空间中加载大多数C代码,但到目前为止还没有预处理器,因此您应该使用枚举作为常量值。
我的sys/stat.h
S_IWUSR
定义如下:
#define _S_IWRITE 0x0080
...
#define _S_IWUSR _S_IWRITE
...
#define S_IWUSR _S_IWUSR
LuaJIT示例:
local ffi = require("ffi")
ffi.cdef([[
enum{S_IWUSR = 0x0080};
]])
print(ffi.C.S_IWUSR) -- 128
还有static const
变量添加类型的方法。
static const int S_IWUSR = 0x0080;
但是你必须要注意不要重新定义!请记住:每个Lua状态只有一个FFI实例,require("ffi")
不会创建一个新的。建议将C定义放在一个模块中,让Lua包系统管理它们只需加载一次。