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值。

(完)

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux运维实战之DNS(bind)服务器的安装与配置

    Linux运维实战之DNS(bind)服务器的安装与配置

    2021年9月3日
    46
  • JS中prototype介绍

    JS中prototype介绍转载原文点这里用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,最近看了一些JavaScript高级程序设计,终于揭开了其神秘面纱。每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数…

    2022年7月23日
    11
  • nextSibling的兼容问题「建议收藏」

    nextSibling的兼容问题「建议收藏」这个有两个兼容性,innerText不是所有浏览器都兼容的,要用innerHTML 然后就是,对于节点关系,ie有事会将期间的空格当成一个文本节点,但火狐就不会,因此你的nextSibling很可能在ie下取到的是一个文本节点,换在火狐下就是另外一个。本文转自:http://ailantian.bokee.com/6418694.html原文如下:网

    2022年7月13日
    17
  • 关于ASP.Net的validateRequest=false(验证请求)[通俗易懂]

    关于ASP.Net的validateRequest=false(验证请求)[通俗易懂]ASP.Net的validateRequest=false      validateRequest=”false”  指是否要IIS验证页面提交的非法字符,比如:>,   ASP.Net1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个HttpReques

    2022年6月4日
    34
  • Mysql之Linux环境下如何彻底删除卸载Mysql

    Mysql之Linux环境下如何彻底删除卸载Mysql首先连接操作系统,切换到root用户。一、如果是使用yum安装的mysql,使用如下命令进行卸载(不能确定使用何种方式安装的mysql情况下,按后续步骤一一进行处理即可):#yumremovemysqlmysql-servermysql-libscompat-mysql51#rm-rf/var/lib/mysq#rm/etc/my.cnf使用rpm-qa|grepmysq…

    2022年6月18日
    37
  • oracle触发器示例,Oracle触发器简单示例

    oracle触发器示例,Oracle触发器简单示例首先创建两张测试表:CREATETABLEtest(t_idNUMBER(4),t_nameVARCHAR2(20),t_ageNUMBER(2),t_sexCHAR);CREATETABLEtest_log(caozuoVARCHAR2(20),tdatedate);然后创建触发器并且进行测试:CREATEORREPLACETRIGGERtest_t…

    2022年7月11日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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