lua通過乙個執行時棧來維護引數傳遞及返回,使用lua_to*等函式獲取lua傳遞到c函式的引數,使用lua_push*從c函式返回值到lua指令碼。此外也可以使用lua_getglobal從c函式獲取lua指令碼定義的全域性變數。
#include #include #include /* for function exit() */
#include /* for input/output */
void bail(lua_state *l, char *msg)
int lua_func_from_c(lua_state *l)
int main(int argc, const char *argv)
lua_state *l = lual_newstate(); /* create new lua state variable */
/* load lua libraries, otherwise, the lua function in *.lua will be nil */
lual_openlibs(l);
/* register new lua function in c */
lua_register(l, "lua_func_from_c", lua_func_from_c);
if( lual_loadfile(l,argv[1]) ) /* only load the lua script file */
bail(l, "lual_loadfile() failed");
if( lua_pcall(l,0,0,0) ) /* run the loaded lua file */
bail(l, "lua_pcall() failed");
lua_close(l); /* close the lua state variable */
return 0;
}
lua指令碼(my.lua)如下所示(在lua指令碼中,如果變數不用local明確宣告為區域性變數,則預設為全域性變數):
print("hello world")
global_var = "this is a global string"
first, second = lua_func_from_c("the first one", 2)
print("the first returned", first)
print("the second returned", second)
執行結果:
hello world
this is c
the first argument: the first one
the second argument: 2
global_var is this is a global string
the first returned the first return
the second returned 4
函式 返回多個引數
返回多個資料,返回的是元組 解包 用變數來接收 info xiaoming beijing haidian name addr,arte info 用三個變數來接受 print name addr,arte 區域性變數 在函式中定義的變數 沒有加global修飾 在函式裡面,除了函式就失效了 例如 ...
C 函式如何返回多個引數值
有時我們需要從通過乙個函式返回多個值,不幸的是c c 不允許這樣做 但我們可以通過一些巧妙的方法來達到這種效果。下面本篇文章就來給大家介紹c c 從函式中返回多個值的方法,希望對大家有所幫助。在函式呼叫時,傳遞帶有位址的引數,並使用指標更改其值 這樣,修改後的值就會變成原始引數。下面通過 示例來看看...
Lua函式的多個返回值
lua中的函式的乙個很特殊也很有用的性質,即可以有多個返回值。包括一些內建的函式就是這樣。比如string.find函式,在給定的字串中查詢乙個pattern,如果有匹配的部分,則返回對應的頭 尾的兩個索引值 如果不存在匹配,則返回nil。當然,使用者定義的函式也可以有多個返回值,通過return關...