在从lua调用的C ++函数中打印静态变量

我从我的lua模块中调用定义在共享对象文件中的C ++函数(print \ _no)。 C ++函数使用从lua传递的参数初始化静态变量。

我原本期望当这个函数被调用多次时,变量将保留它在第一次被调用时得到的值。这是我对函数内静态变量的当前理解。

这是我的C ++代码(test.cpp)

外部"C"
{
#include“lua.h”
#include“lauxlib.h”
#include“lualib.h”
}

静态int print_no(lua_State * L)
{
  static double d = lua_tonumber(L,1); / *获取参数* / 
  return 1; / *结果数* / 
}

静态const结构luaL_Reg mylib [] = 
{
  {“print_no”,print_no},
  {NULLNULL} / *哨兵* / 
}; 

外部“C”
{
  int luaopen_mylib(lua_State * L)
  {
    luaL_register(L,“mylib”,mylib);
    返回1;
  }
}

我使用以下命令制作.so文件:

g ++ -shared -o mylib.so test.cpp -fPIC

我使用的lua代码(module.lua)如下:

临时=require “mylib”
print(temp.print_no(5))
print(temp.print_no(6))

当我运行此模块时,输出如下:

 [vishal@localhost test]$ lua -v 
 Lua 5.1.4 版权所有(C)1994-2008 Lua.org,PUC-Rio 

 [vishal@localhost test]$ lua module.lua 
 5 
 6 

我原本期望两次都会打印5。我的理解错了吗?

点赞
用户5494370
用户5494370

你没有将结果推回到lua堆栈,因此lua只是读取堆栈上的下一个值,这个值是你传递给print_no的参数。

尝试:

static int print_no(lua_State *L)
{
  static double d = lua_tonumber(L, 1); /* 获取参数 */
  lua_pushnumber(L, d);
  return 1; /* 结果的数量 */
}
2019-08-02 06:57:57