Skip to content

lua_CFunction

C関数のための型です。

c
typedef int (*lua_CFunction) (lua_State *L);

説明

C関数のための型です。

Luaと適切に通信するために、C関数は以下のプロトコルを使用する必要があります。これはパラメータと結果の受け渡し方法を定義しています:C関数は引数をLuaからそのスタック内の直接順序で受け取ります(最初の引数が最初にプッシュされます)。したがって、関数が開始するとき、lua_gettop(L)は関数によって受け取られた引数の数を返します。最初の引数(存在する場合)はインデックス1にあり、最後の引数はインデックスlua_gettop(L)にあります。Luaに値を返すために、C関数はそれらをスタックに直接順序でプッシュし(最初の結果が最初にプッシュされ)、結果の数を返します。結果の下にあるスタック内の他の値は、Luaによって適切に破棄されます。Lua関数と同様に、Luaによって呼び出されたC関数も多くの結果を返すことができます。

サンプルコード

c
static int foo (lua_State *L) {
  int n = lua_gettop(L);
  lua_Number sum = 0;
  int i;
  for (i = 1; i <= n; i++) {
    if (!lua_isnumber(L, i)) {
      lua_pushstring(L, "incorrect argument");
      lua_error(L);
    }
    sum += lua_tonumber(L, i);
  }
  lua_pushnumber(L, sum/n);
  lua_pushnumber(L, sum);
  return 2;
}

このコードは、可変数の数値引数を受け取り、その平均値と合計値を返します。

互換性

  • Lua5.1

関連項目

  • lua_isnumber
  • lua_pushstring
  • lua_error