C操作Lua虚拟栈的API

Lua是一种嵌入式语言,在C中通过Lua库来执行,Lua和C的通信要通过一个虚拟栈。

C的API:

操作栈函数

 1 /*压入栈函数 lua_psuhtype*/
 2 void lua_pushnil       (lua_State *L);
 3 void lua_pushboolean   (lua_State *L, int bool);
 4 void lua_pushnumber    (lua_State *L, lua_Number n);
 5 void lua_pushinteger   (lua_State *L, lua_Integer n);
 6 void lua_pushunsigned  (lua_State *L, lua_Unsigned n);
 7 void lua_pushlstring   (lua_State *L, const char *s, size_t len);
 8 void lua_pushstring    (lua_State *L, const char *s);
 9 /*检测栈空间*/
10 int lua_checkstack (lua_State *L, int sz);

查询栈函数

/*检测栈元素能否转化为对应类型*/
int lua_is* (lua_State *L, int index);
/*返回栈元素类型*/
int lua_type (lua_State *L, int index);
/*返回栈元素对应值*/
int lua_toboolean (lua_State *L, int index);
const char *lua_tolstring (lua_State *L, int index, size_t *len);
lua_Number lua_tonumber (lua_State *L, int index);
lua_Integer lua_tointeger (lua_State *L, int index);
lua_Unsigned lua_tounsigned (lua_State *L, int idx);
时间: 2024-10-08 11:13:20

C操作Lua虚拟栈的API的相关文章

lua中栈

首先我们来讲一下栈: lua与c语言通讯的主要方法是通过一个无所不在的虚拟栈.几乎所有的api调用都会操作这个栈上的值:所有的数据交换,无论是lua到c语言或c语言到lua都是通过这个栈来完成.栈可以解决lua与c语言之间存在的两大差异,第一个差异时lua使用垃圾回收收集,而c语言要求显示地释放内存:第二种是lua使用动态类型,而c语言使用静态类型. 我们来看一下c与lua之间是怎么通讯的:(假如c语言想知道lua中的money字符串的值) 1.c想获取lua中的money字符串的值,需要c把m

Java操作mongoDB2.6的常见API用法

对于mongoDB而言,学习方式和学习关系型数据库差不太多 开始都是学习如何insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是通过它提供的各个驱动(比如Java.PHP.node.js等等)来练习所谓的高级用法 另外:相对于Oracle有PLSQL Developer,MySQL有HeidiSQL mongoDB也不例外,它的图形化工具中有一款叫做mongoVUE的,我用的是1.5.3破解版(不是每15天就得改一次注册表的

Lua 中栈操作的C API示例

这是<Lua程序设计>中的例子,做个简单记录. #include <stdio.h> #include <lua5.2/lua.h> #include <lua5.2/lauxlib.h> static void stackDump(lua_State *L){ int i; int top = lua_gettop(L); for(i = 1; i <= top; i++){ int t = lua_type(L, i); switch(t){ ca

JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate框架概述 什么是Hibernate? 框架:软件的半成品,完成部分代码的功能. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操作数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的web应用程序中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成

用递归函数和栈操作逆序栈

题目描述 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构. 给定一个栈Stack以及栈的大小top,请返回逆序后的栈. 测试样例: [1,2,3,4,5],5 返回:[5,4,3,2,1] Solution 1:思路:第一步,将最上面的数出栈保存,然后将栈逆序(递归) 第二步,将第一步中出栈的数插入到栈的最底层(

虚拟机字节码操作引擎-----基于栈的字节码解释引擎

虚拟机调用方法可以有解析和分派两种方式,那么虚拟机是如何执行方法中的字节码指令的? 1.解释执行   谈是解释执行还是翻译执行没有意义了,只有确定了某种具体的java实现版本和执行引擎运行模式时,谈解释执行还是编译执行才比较贴切. 如今,基于物理机.java虚拟机,或者非Java的其他高级语言虚拟机的语言,大多都会遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法分析和语法分析处理,把源码转化为抽象语法树 .对于一门具体语言的实现来说,词法分析.语法分析以致后面的优化器和目标代码生

栈操作之顺序栈

数据结构: 栈是允许在同一端进行插入和删除操作的特殊线性表.允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom):栈底固定,而栈顶浮动:栈中元素个数为零时称为空栈.插入一般称为进栈(PUSH),删除则称为退栈(POP).栈也称为后进先出表. 操作系统: 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放. 具体操作有:初始化 判断栈满 判断栈空 push po

Java操作mongoDB2.6的常见API使用方法

对于mongoDB而言,学习方式和学习关系型数据库差不太多 開始都是学习怎样insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是通过它提供的各个驱动(比方Java.PHP.node.js等等)来练习所谓的高级使用方法 另外:相对于Oracle有PLSQL Developer,MySQL有HeidiSQL mongoDB也不例外,它的图形化工具中有一款叫做mongoVUE的,我用的是1.5.3破解版(不是每15天就得改一次注冊

Android 操作串口 (android serial port api)

前几天公司有通过搭载Android系统的开发板来使用打卡机统计数据的需求,对于攻城狮来说就需要在Android平台上读写打卡机的串口,在网上搜索一些东西之后发现了在google code 上的android serial port api可以用,墙了之后拿到源码发现还有demo,不错不错,我这个帖子就通过serial port api的源码简单得实现一个读写串口,这个当然是在native写的,如果还有哪些童鞋不清楚android上使用jni和native的话可以跳转到我的上篇帖子 点我点我 在A