Lua中C API棧操作

2022-05-10 14:30:16 字數 1741 閱讀 6428

向棧中壓入資料:

lua_pushnil(lua_state*);

lua_pushboolean(lua_state*, bool);

lua_pushnumber(lua_state*, lua_number);

lua_pushinteger(lua_state*, lua_integer)

lua_pushlstring(lua_state*, const char*, size_t);

lua_pushstring(lua_state*, const char*);

獲取棧中元素的型別

lua_type(lua_state* l, int index);    

型別包括 lua_tnil, lua_tboolean, lua_tnumber, lua_tstring, lua_ttable, lua_tfunction, lua_tuserdata

驗證棧中的元素型別;

lua_is*(lua_state* l, int index)

其實有了lua_type()完全可以自己寫型別驗證的 每必要使用lua提供的api

比如可以定義

bool lua_is_number (lua_state*l, int index)

所以完全是可以利用lua_type來自行定義對棧中元素的驗證的。

獲取棧中元素的型別的字串表示:

lua_typename(lua_state*, int )這裡的int值是通過lua_type()獲取到的值

其實這些都可以通過lua_type(lua_state*)來進行實現

const char*lua_type_str(int lua_type) 

return

type

;}

這樣就可以實現你自己的棧元素型別的字串顯示了

獲取指定位置的元素可以使用lua_to*(lua_state*, int )

int  lua_toboolean(lua_state*, int);

lua_number lua_tonumber(lua_state*, int);

lua_integer lua_tointeger(lua_state*, int );

const char* lua_tolstring(lua_state*, int, size_t length);

lua_gettop(lua_state*)      得到棧中元素的個數

lua_settop(lua_state*, int index)

設定棧中元素的個數,如果設定的值比當前棧中元素的個數多,則將多出的那部分全部丟棄,如果設定的值比當前棧中元素個數多,則將新加的值全部設定為nil.

lua_pushvalue(lua_state*, int index) 將index位置的值的副本壓入棧頂

lua_remove(lua_state* l, int index)將指定位置的元素刪除,並且其上的所有元素下移

lua_insert(lua_state*, int index) 將指定位置之上的元素上移,空出該位置,並將棧頂元素移到此處

lua_replace(lua_state*, int index)將棧頂元素彈出,並將其設定到指定的索引上。

lua_pop是以乙個巨集的形式進行定義的

#define    lua_pop(l, n)     lua_settop(l, -(n) - 1);

比如彈出棧頂的元素則可以使用 lua_pop(l, 1)

Lua操作棧c呼叫lua

include stdafx.h int main 得到初始化棧大小 printf 初始化棧大小 d n lua gettop plua 開啟所有功能庫 lual openlibs plua 載入指令碼 lual dofile plua,test.lua 將指令碼中的add函式入棧 int ret ...

Lua和C語言的互動 C API

lua可作為擴充套件性語言 lua可以作為程式庫用來擴充套件應用的功能 同時也是個可擴充套件的語言 lua程式中可以註冊由其他語言實現的函式 c和lua互動的部分稱為c api。c api是乙個c 與lua進行互動的函式集。他由以下部分組成 讀寫lua全域性變數的函式 呼叫lua函式的函式 執行lu...

c呼叫 lua 棧操作

打算記錄一些lua api,可能會覺得lua文件中已經說的很清楚了,但是我將用自己的方式,記錄下我認為重要的東西,先約定一下api說明的格式 編號.api作用簡述 api函式原型 api操作說明 返回值說明 對棧的影響 注意事項 1.建乙個新錶 void lua createtable lua st...