1、Lua API中提供注册C函数关键在lua_pushcclouse()函数。该函数可以在Lua Code中定义C函数。 但是Lua 提供了几个常用的宏定义,用于注册C函数。
这几个宏定义为:
/#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0)
#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
LUALIB_API void luaL_openlib (lua_State *L, const char *libname, const luaL_Reg *l, int nup)
LUALIB_API void (luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l)
提供的宏定义和拓展库,主要为了方便在全局变量中注册C函数和注册整个C模块。
#include <iostream>
using namespace std;
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
//在Lua Code中注册的函数
int sum_zero(lua_State *L)
{
int top =lua_gettop(L);
int sum =0;
for(size_t t=top;t>0;t--)
{
int lnum =lua_tonumber(L,t);
sum+=lnum;
}
lua_pushnumb