簡體   English   中英

在從lua調用的C ++函數中打印靜態變量

[英]Printing a static variable inside a C++ function called from lua

我正在從我的lua模塊中調用在共享對象文件中定義的C ++函數(print_no)。 C ++函數采用從lua傳遞的參數,並使用它來初始化靜態變量。

我期望當多次調用此函數時,該變量將保留它在第一次調用時獲得的值。 這是我目前對函數內部靜態變量的理解。

這是我的C ++代碼(test.cpp)

extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}

static int print_no(lua_State *L)
{
  static double d = lua_tonumber(L, 1); /* get argument */
  return 1; /* number of results */
}

static const struct luaL_Reg mylib [] =
{
  {"print_no", print_no},
  {NULL, NULL} /* sentinel */
};

extern "C"
{
  int luaopen_mylib (lua_State *L)
  {
    luaL_register(L, "mylib", mylib);
    return 1;
  }
}

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

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

下面給出的是我的lua代碼(module.lua)

temp = require "mylib"
print(temp.print_no(5))
print(temp.print_no(6))

下面給出的是我運行此模塊時的輸出:

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

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

我期待兩次都將被打印出來。 我的理解有什么問題?

您沒有將結果推回lua堆棧,因此lua只是讀取堆棧上的下一個值,這是您傳遞給print_no的參數。

嘗試:

static int print_no(lua_State *L)
{
  static double d = lua_tonumber(L, 1); /* get argument */
  lua_pushnumber(L, d);
  return 1; /* number of results */
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM