第一版是為 Lua 5.0 編寫的。儘管在很大程度上仍然適用於後續版本,但還是有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也協助支援 Lua 專案。
![]() |
用 Lua 程式設計 | ![]() |
第四部分。C API 第 24 章。C API 概觀 |
API 有一個推入函式,適用於可在 C 中表示的每種類型的 Lua:lua_pushnil
適用於常數 nil、lua_pushnumber
適用於數字(double
)、lua_pushboolean
適用於布林值(在 C 中為整數)、lua_pushlstring
適用於任意字串(char *
),以及 lua_pushstring
適用於以零終止的字串
void lua_pushnil (lua_State *L); void lua_pushboolean (lua_State *L, int bool); void lua_pushnumber (lua_State *L, double n); void lua_pushlstring (lua_State *L, const char *s, size_t length); void lua_pushstring (lua_State *L, const char *s);另外還有函式可將 C 函式和使用者資料值推入堆疊;我們稍後會討論這些函式。
Lua 中的字串並非以零終止;因此,它們可以包含任意二進位資料,並依賴明確的長度。將字串推入堆疊的官方函式為 lua_pushlstring
,它需要一個明確的長度作為引數。對於以零終止的字串,您也可以使用 lua_pushstring
,它使用 strlen
提供字串長度。Lua 永遠不會保留指向外部字串(或任何其他物件)的指標(C 函式除外,它們總是靜態的)。對於必須保留的任何字串,Lua 皆會製作一個內部副本或重複使用一個副本。因此,您可以在這些函式傳回後立即釋放或修改您的緩衝區。
每當您將元素推入堆疊時,您有責任確保堆疊有足夠的空間容納它。請記住,您現在是一位 C 程式設計師;Lua 程式不會寵壞您。當 Lua 啟動,以及任何時候 Lua 呼叫 C 時,堆疊至少有 20 個可用插槽(此常數在 lua.h
中定義為 LUA_MINSTACK
)。這對於大多數常見用途來說已經綽綽有餘,所以我們通常甚至不會想到這一點。然而,有些任務可能需要更多的堆疊空間(例如,呼叫具有可變數量引數的函式)。在這種情況下,您可能想要呼叫
int lua_checkstack (lua_State *L, int sz);它會檢查堆疊是否具有足夠空間以符合您的需求。(稍後會詳細說明。)
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |