C语言调用Lua函数[通俗易懂]

C语言调用Lua函数

大家好,又见面了,我是全栈君。

记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪。

那个时期,人们常常称互联网为赛博空间。现在工作了,大量的零碎时间用于上微博,知乎,QQ。这些碎片化的阅读让人读起来轻松,也能获取些粗浅的信息。

然而它们是消耗时间的黑洞,时间就这样一分一秒地飞逝,年末的时候,知乎会告诉你回答了多少问题。阅读了相当于一部《红楼梦》那么多的文字。仅仅是当你静下来一想,这些浅阅读并没给你带来有深度,系统的知识。在你的时间线上,两条相邻信息往往是八竿子也打不着的。并且你还时不时去看看关注者有没有更新。期待让你眼前一亮的信息。结果往往是趁兴而去,败兴而回。屏幕上的信息永无止境界滚动着,是如此的热闹,仿佛每一个人都在狂欢,而我的内心却如此的空虚与孤独。


在lua API中。调用一个函数的步骤非常easy:
1.压入你要调用的函数,使用lua_getglobal。
2.压入调用參数。
3.使用lua_pcall
4.从栈中弹出结果。

举例说明,如果你有这么一个lua函数:
function f (x, y)

     return (x^2 * math.sin(y))/(1 – x)

end

那么。我们就能够定义个c函数来封装这个调用:
/* call a function ‘f’ defined in Lua */

double f (double x, double y) 
{

double z;
lua_getglobal(L, “f”); 
lua_pushnumber(L, x); 
lua_pushnumber(L, y); 
/* do the call (2 arguments, 1 result) */
if (lua_pcall(L, 2, 1, 0) != 0)
     error(L, “error running function ‘f’: %s”,
lua_tostring(L, -1));

if (!lua_isnumber(L, -1))
     error(L, “function ‘f’ must return a number”);
z = lua_tonumber(L, -1);
lua_pop(L, 1); 
return z;
}

lua_pcall在压入结果的之前,会将函数,和參数弹出,假设返回多个结果,第一个最先压入。假设lua_pcall执行出错。那么会返回个非0值。

(完)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115446.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 激光slam综述_SLAM算法

    激光slam综述_SLAM算法目录1.3D激光SLAM简介2.3D激光雷达SLAM3.高精度V-LOAM方案4发展趋势1.3D激光SLAM简介在3D激光SLAM领域中,由ZhangJ等人提出的LOAM方案,利用3D激光雷达采集数据,进行基于特征点的扫描匹配,利用非线性优化方法进行运动估计,激光里程计的输出与地图进行匹配,包括直线匹配和平面匹配,无回环检测模块,点面特征还不够可靠。2.3D激光雷达SLAM3.高精度V-LO..

  • PHP过滤指定字符串,过滤危险字符

    PHP过滤指定字符串,过滤危险字符

  • CentOS7各个版本镜像下载地址

    CentOS7各个版本镜像下载地址

  • rabbitmqkafka对比_全场景

    rabbitmqkafka对比_全场景这是陈东景于2021年8月29日下午16点原创作品,转载请标明出处!!!!在进行软件设计的过程中,如果软件设计业务上存在需要短时间内处理大批量的信息,又需要能保证软件能正常运行(保证软件的高可靠和高可用)。因为大批量(几十万,几百万级别的数据或者消息需要同一个时间处理),软件的IO过高,会导致软件运行阻塞或者消耗内存过高而崩溃,甚至是宕机。消息队列的概念被提了出来,通过缓存消息的模式,进行生产和消费。通过异步处理的方式,解耦这种短时间内出现大批量需要处理消息的场景。目前我们使用到的比…

    2022年10月14日
  • 感谢读者张舒鳌指出勘误

    感谢读者张舒鳌指出勘误

  • group by 与 where, having以及顺序

    group by 与 where, having以及顺序1.GROUPBY子句必须出现在WHERE子句之后,ORDERBY子句之前.HAVING语句必须在ORDERBY子句之后。(where先执行,再groupby分组;groupby先分组,having在执行。)2.除聚集计算语句外,SELECT语句中的每个列都必须在GROUPBY子句中给出。count()为聚集函数,vend_id在后面groupby中有,所以select后面有。sel…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号