第一版是针对 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。保留所有权利。 |