发布网友 发布时间:2022-04-22 07:42
共1个回答
热心网友 时间:2022-06-17 22:38
1.编程接口就是对于某种逻辑写的一定规范的数据格式,
就是宿主程序跟 Lu通讯用的一组 C 函数。 所有的 API 函数按相关的类型以及常量都声明在头文件 lua.h 中。
2.虽然我们说的是“函数”, 但一部分简单的 API 是以宏的形式提供的。
除非另有说明, 所有的这些宏都只使用它们的参数一次 (除了第一个参数,那一定是 Lu状态), 因此你不需担心这些宏的展开会引起一些副作用。
3.C 库中所有的 Lua API 函数都不去检查参数是否相容及有效。
然而,你可以在编译 Lu 时加上打开一个宏开关 LUA_USE_APICHECK 来改变这个行为。
Lu使用一个 虚拟栈 来和 C 互传值。 栈上的的每个元素都是一个 Lu 值 (nil,数字,字符串,等等)。
4.无论何时 Lua 调用 C,被调用的函数都得到一个新的栈,
这个栈独立于 C 函数本身的栈,也独立于之前的 Lu栈。 它里面包含了 Lu传递给 C 函数的所有参数, 而 C 函数则把要返回的结果放入这个栈以返回给调用者。
5.方便起见, 所有针对栈的 API 查询操作都不严格遵循栈的操作规则。
而是可以用一个 索引 来指向栈上的任何元素: 正的索引指的是栈上的绝对位置(从1开始); 负的索引则指从栈顶开始的偏移量。 展开来说,如果堆栈有 n 个元素, 那么索引 1 表示第一个元素 (也就是最先被压栈的元素) 而索引 n 则指最后一个元素; 索引 -1 也是指最后一个元素 (即栈顶的元素), 索引 -n 是指第一个元素。
4.2 – 栈大小
5.当你使用 Lu API 时, 就有责任保证做恰当的调用。 特别需要注意的是, 你有责任控制不要堆栈溢