入門Luaプログラミング第11章 C言語との連携

C言語Luaの連携などなど。スタックの説明のあたりがさっぱりだったのでそこは後で……

C言語の自作関数をLuaから使う

C言語側で作った自作関数を登録してLuaから呼ぶ。
最初にC言語本体を。

/* aaa.c */
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

int aaa(lua_State* L)
{
  lua_pushnumber(L, 12);
  lua_pushnumber(L, 24);
  return 2;
}

int main(void)
{
  lua_State* L = luaL_newstate();

  luaL_openlibs(L);
  lua_register(L, "aaa", aaa);

  luaL_loadfile(L, "aaa.lua") || lua_pcall(L, 0, 0, 0);

  lua_close(L);
  return 0;
}


で、コンパイル。(環境:MacOS 10.6.5 / gcc 4.2.1 / Lua 5.1.4)

$ gcc -I./lua-5.1.4/src/ -L./lua-5.1.4/src/ -o aaa aaa.c -llua


C言語の関数を呼ぶLuaスクリプト

-- aaa.lua
i, n = aaa()
print(i)
print(n)


これを実行すると……

$ ./aaa
12
24

という感じ。こんなに簡単にLuaインタプリタを組み込めるなんて……


スタックは…… まあもっとLuaC言語が使えるようになってきたら再度。11章はこれで終わり。