lua函数返回值
学习目标lua_call与返回值lua_pcalllua_getgloballua_gettop(L)     //参数个数
lua_getglobal:把全局变量 name 里的值压入堆栈
lua_call调用一个函数void lua_call(lua_State*L,int nargs,int nresults);//nargs是参数的个数 nresults是返回值个数调用一个函数请遵循以下协议首先,要调用的函数应该被压入堆栈;接着把需要传递给这个函数的参数按正序压栈;这是指第一个参数首先压栈.最后调用一下 lua_call;nargs 是你压入堆栈的参数的个数.当函数调用完毕后,所有的参数以及函数本身都会出栈.而函数
的返回值这时则被压入堆栈.返回值的个数将调整为 nresults 个,除非 nresults 被设置成 LUA_MULTRET. 在这种情况下,所有的返回值
都被压入堆栈中.lua 会保证返回值都放入栈空间中.函数返回值将按正序压栈(第一个返回值首先压栈),因此在调用结束后,最后一个
返回值将被放在栈顶.
lua_CFunction
typedef int (*lua_CFunction)(lua_State*L)
C 函数的类型
为了正确的和lua通讯,C函数必须使用下列 定义了参数以及返回值传递方法的协议:
1 c函数通过 lua 中的堆栈来接受参数,参数以正序入栈(第一个参数首先入栈)
2 因此 当函数开始的时候,lua_gettop(L) 可以返回函数收到的参数个数.第一个参数(如果有的话)在索引 1的地方
而最后一个参数在索引 lua_gettop(L)处
3 当需要向 lua 返回值的时候 c函数只需要把它们以正序压到堆栈上(第一个返回值最先压入),然后返回这些返回值的个数
在这些返回值之下的 堆栈上的东西都会被 lua 丢掉lua_gettop(L)     //参数个数lua_call(L,8,1)       //传递参数的个数 返回值的个数lua_getglobal(L,"add")  //把自己定义函数函数 压入栈中
#include "stdafx.h"
#include"process.h"
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
extern "C"
int leijia_lua(lua_State*L)
{int j = lua_gettop(L);//lua_call(L,8,1)   上面的压入参数个数int num = 0;printf("函数的个数%d\n", lua_gettop(L));for (int i=0;i<=j;i++ ){num += (int)lua_tointeger(L, i);//printf("%d\n", num);}printf("函数 参数个数%d 和%d\n",j,num);lua_pushinteger(L, 555);//栈底lua_pushinteger(L, 444);lua_pushinteger(L, 333);lua_pushinteger(L, 222);lua_pushinteger(L, 111);//栈顶return 5;
}
int main()
{lua_State*L = luaL_newstate();luaL_openlibs(L);lua_register(L, "leijia", leijia_lua);lua_getglobal(L, "leijia");//把自己定义函数函数 压入栈中lua_pushinteger(L, 1);lua_pushinteger(L, 2);lua_pushinteger(L, 3);lua_pushinteger(L, 4);lua_pushinteger(L, 5);lua_call(L, 5, 5);//传递参数的个数 返回值的个数//luaL_dostring(L, "leijia()");//luaL_dofile(L, "lisaisai.txt");  printf("栈底%d\n", (int)lua_tointeger(L, 1));printf("栈底%d\n", (int)lua_tointeger(L, 2));printf("栈底%d\n", (int)lua_tointeger(L, 3));printf("栈底%d\n", (int)lua_tointeger(L, 4));printf("栈底%d\n", (int)lua_tointeger(L, 5));lua_close(L);system("pause");return 0;
}

lua函数返回值 lua_call lua_getglobal lua_gettop(L)相关推荐

  1. python函数的返回值是返回引用吗_python-函数(上):函数返回值、函数调用、前向引用...

    编程方法: 1.面向对象:类--class 2.面向过程:过程--def 3.函数式编程:函数--def #python中函数#函数的定义#打印一个佛祖镇楼 -> 一个功能点的解释 defpri ...

  2. php7 返回值,7.6.4 函数返回值

    ### 7.6.4 函数返回值 调用内部函数时其返回值指针作为参数传入,这个参数为`zval *return_value`,如果函数有返回值直接设置此指针即可,需要特别注意的是设置返回值时需要增加其引 ...

  3. Python的函数返回值和参数

    一.函数返回值 *返回多个值 Python的函数返回多值其实就是返回一个tuple.但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值. *没有返 ...

  4. system函数返回值

    system(执行shell 命令) 相关函数  fork,execve,waitpid,popen 表头文件  #include<stdlib.h> 定义函数  int system(c ...

  5. system函数返回值,Linux

    理论 我们先看下man手册是怎么说的man system RETURN VALUEThe value returned is -1 on error (e.g., fork(2) failed), a ...

  6. C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)

    引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...

  7. C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)

    先看以下代码 #include <iostream> #include <string> using namespace std;int main() // main() 是程 ...

  8. C指针7:指针作为函数返回值

    C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include <stdio.h> ...

  9. 使用指针做函数返回值

    使用指针做函数返回值 1.当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72.此时需要我们注意的是该地址值所指向的空间是否存在( ...

最新文章

  1. Redis RDB 持久化详解
  2. macbookair有没有touchbar_买 MacBook Pro 到底要不要选 Touch Bar 版?看清需求后再下手...
  3. linux 查看软连接_linux删除原理
  4. 第一次写小程序,遇到的坑
  5. 专访腾讯徐汉彬:日请求高达3.5亿+平台的架构设计及演变
  6. 小时代5-perl的INC设置分析
  7. python爬虫代码模板_Python:学习Python爬虫的第一天
  8. 学破解 一 PE格式之MS-DOS MZ header
  9. Apache Drill 1.4性能增强的简要概述
  10. vue实现可编辑的文字_苹果还自带文字转语音,只要一键按下便可实现,今天分享给大家...
  11. 印度将推出太阳能光伏制造政策
  12. return 输出为空php,thinkphp5 返回json数据的方法---以及返回json为空的原因
  13. 浅谈c#中使用lock的是与非
  14. bzoj 2442: [Usaco2011 Open]修剪草坪(单调队列)
  15. 再探Linux内核write系统调用操作的原子性
  16. ML for trading -cs7646-02
  17. Python 好友管理系统【简单易懂,代码可以直接运行】
  18. 微软Google人才战主角首次开口:Google让我震撼(转)
  19. Tomcat+Apache动静分离
  20. 学Python有前途吗?学Python能做什么?

热门文章

  1. 中学教学01教学概述02教学过程03教学原则与方法
  2. beamer中block样式修改
  3. 「镁客早报」特斯拉标准版Model3正式上市,售价3.5万美元;百度被爆搜索小学和幼儿园会导向色情网站...
  4. 枫林红叶随身落, 遍地花海迹中寻。 独贪长不愿醒, 回首百年烟云过。
  5. 当数据可视化和艺术与卑微的组织结构图碰撞时
  6. thinkphp封装短信宝验证码
  7. 什么是HTML? HTML基础
  8. Windows激活时,不想直接用微软账户登录咋办
  9. eclipse中进行java编程时,CTRL+左键时,看不到源码的解决方法。
  10. Nginx根据域名分发不同端口