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)
上一篇 2022年2月4日 下午12:00
下一篇 2022年2月4日 下午1:00


相关推荐

  • C++ 数组求和_excel数组求和公式

    C++ 数组求和_excel数组求和公式C++数组求和用自带的库超级方便,而且也达到代码更加简洁的目的。你只需要做2步:1、导入库文件include2、添加空间名usingnamespacestd;然后就可以直接使用:accumulate(arrayName,arrayName+数组长度,数组起始位)demo:intarray[6]={1,2,3,4,5,6};in…

    2022年10月2日
    5
  • jni断点调试「建议收藏」

    jni断点调试「建议收藏」jni断点调试

    2022年5月16日
    46
  • VMware14密钥_vmware密钥14

    VMware14密钥_vmware密钥14VMware虚拟机已升级至14版本,之前的12版本的秘钥已经无法使用,在此分享一下VMwareWorkstation14永久激活密钥:CG54H-D8D0H-H8DHY-C6X7X-N2KG6ZC3WK-AFXEK-488JP-A7MQX-XL8YFAC5XK-0ZD4H-088HP-9NQZV-ZG2R4ZC5XK-A6E0M-080XQ-04ZZG-YF08DZY5H0-D3Y8…

    2025年11月17日
    5
  • Django(75)django-rest-framework-simplejwt「建议收藏」

    Django(75)django-rest-framework-simplejwt「建议收藏」前言由于之前我们一直使用的django-rest-framework-jwt这个库,但是作者在17年的时候就已经不再维护了(有部分bug没有解决),所以我们也就不用了,目前我们使用django-r

    2022年7月31日
    26
  • 计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)

    计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)简介这篇文章主要介绍了计算机组成原理——浮点数表示方法(示例代码)以及相关的经验技巧,文章约568字,浏览量241,点赞数7,值得推荐!为了表示浮点数,数被分为两部分:整数部分和小数部分。例如,浮点数14.234就有整数部分14和小数部分0.234.首先把浮点数转换成二进制数,步骤如下:1把整数部分转换成二进制.2把小数部分转换成二进制.3在两部分之间加上小数点.浮点数还可以规范化,浮点数可以用单…

    2022年6月18日
    31
  • navicat 15 激活码【注册码】

    navicat 15 激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    45

发表回复

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

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