gpt4 book ai didi

c - 从 C 中查找 Lua 数的符号

转载 作者:行者123 更新时间:2023-12-03 03:41:22 25 4
gpt4 key购买 nike

我有一个看似微不足道的问题。

假设 Lua 堆栈的顶部有一个数字。我想知道(在 C 中)这个数字是正数、负数还是零。

一个简单的解决方案是:

lua_Number num = lua_tonumber(L, -1);
if (num > 0)
print("positive")
else if (num < 0)
print("negative")
else
print("zero")

但是,这在 Lua 5.3 中可能无法正常工作,因为如果它是堆栈上的 Lua 整数 (lua_Integer),则它可能不适合我们的 num 变量(即 lua_Number)。

那么我如何编写我的 C 代码以在 Lua 5.1/5.2 和 Lua 5.3 中工作?

(顺便说一句,我只对符号感兴趣,而不是对数字本身感兴趣,因为这个数字是排序算法的比较函数的返回值。它是比较两个项目的结果。)

最佳答案

一种可能的解决方案是让 Lua 为您进行比较。这可以使用 lua_compare 来完成(或 lua_lessthan ,对于 LuaJIT 和 Lua 5.1):

#if LUA_VERSION_NUM == 501
#define LUA_LESS_THAN(state, index1, index2) lua_lessthan(state, index1, index2)
#elif LUA_VERSION_NUM > 501
#define LUA_LESS_THAN(state, index1, index2) lua_compare(state, index1, index2, LUA_OPLT)
#endif

lua_pushnumber(L, 0);
if (LUA_LESS_THAN(L, -1, -2)) {
// 0 < num
} else if (LUA_LESS_THAN(L, -2, -1)) {
// 0 > num
} else {
// 0 == num
}
lua_pop(L, 1);

关于c - 从 C 中查找 Lua 数的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com