我们应该从Lua的luaL_checkinteger()等函数中显式转换吗?
2015-1-23 5:2:9
收藏:0
阅读:147
评论:1
Lua 5.3弃用了luaL_checkint,luaL_checklong,luaL_optint,luaL_optlong这些仅作为方便使用的宏,它们只是调用luaL _ {check | opt}integer。
虽然因为-DLUA_COMPAT_5_2的原因我们仍然可以使用它们,但是它们没有在用户手册中提到,建议我们使用“带有类型转换”的“luaL_{check | opt}integer”进行代替。
我不是C语言方面的专家,我正在想:
1.在像下面这样的简单情况下,是需要进行类型转换吗?
int i;
i = (int)luaL_checkinteger(L, 1);
2.如果这里不需要转换,那么在哪里需要转换呢?
3.为什么第一次要引入这些已弃用的宏,如果我们没有它们也能做到?换句话说:它们有什么用途?
4.如果函数名中没有嵌入“int”/“long”这些词语,我们不会失去“文档”吗?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
C 不需要这样的强制转换。
基本上,如果你想让数字的行为 完全 像一个特定的 C 类型,那么你应该将它转换为一个。如果你可以接受它的行为像一个
lua_Integer,那么你就不需要强制转换。所以,如果你希望值的范围在
int的范围之内,那么在从 Lua 中提取整数时应该进行转换。如果你试图传递给像printf这样的可变参数函数而没有强制转换,它将获得lua_Integer的完整范围,而不是int的范围。这可能是你想要的,但如果不是,你需要强制转换。它们被添加是因为 pre-Lua 5.3 数字总是
double。因此,要获得任何一种整数类型 需要 强制转换。直接从double转换为int比从double转换为long再转换为int更好。一旦 Lua 正式获得了一个精确的整数类型,这种需求就变得不那么重要了。注意,从来没有
lua_checkfloat。同样的原因也适用。这是开放给解释的。但是,由于整数是 Lua 5.3 中的一流值,我认为最好能够精确地提取整数,就像 Lua 看到的那样。如果用户想将其转换为不同的整数类型,那就由他们自己决定。
至于更好的文档,这不是 C++11。这里没有
auto x = lua_checkinteger(...);。你使用的类型在使用时必须明确声明。如果你将其赋值给一个变量,所有人都清楚你正在做什么。如果你明确地强制转换它,那么再次说明了你正在做什么。如果你将它传递给一个函数,你只需要看一下参数列表就可以看出它被转换成什么了。