#define lua_register(n,f) (lua_pushcfunction(f), lua_storeglobal(n)) /* char *n; */ /* lua_CFunction f; */which receives the name the function will have in Lua, and a pointer to the function. This pointer must have type lua_CFunction , which is defined as
typedef void (*lua_CFunction) (void);that is, a pointer to a function with no parameters and no results.
In order to communicate properly with Lua, a C function must follow a protocol, which defines the way parameters and results are passed.
To access its arguments, a C function calls:
lua_Object lua_getparam (int number);
where number
starts with 1 to get the first argument.
When called with a number larger than the actual number of arguments,
this function returns
LUA_NOOBJECT
.
In this way, it is possible to write functions that work with
a variable number of parameters.
To return values, a C function just pushes them onto the stack, in direct order; see Section 5.2. Like a Lua function, a C function called by Lua can also return many results.
Section 8.9 presents an example of a CFunction.