首先能够被Lua调用的C函数要满足如下声明:
//c
typedef int (*lua_CFunction) (lua_State *L);
例如:
由于Lua有局部栈,所以参数在栈中的位置永远是1开始。并且函数返回后会自动清理栈。
//c
static int l_sin (lua_State *L) {
double d = luaL_checknumber(L, 1);
lua_pushnumber(L, sin(d));
return 1; /* number of results */
}
然后,你先要注册c函数(其实就是把函数地址压入栈并设置全局变量):
//c
lua_pushcfunction(L, l_sin);
lua_setglobal(L, "mysin");