向栈中压入数据:

lua_pushnil(lua_State*);

lua_pushboolean(lua_State*, bool);

lua_pushnumber(lua_State*, lua_Number);

lua_pushinteger(lua_State*, lua_Integer)

lua_pushlstring(lua_State*, const char*, size_t);

lua_pushstring(lua_State*, const char*);

获取栈中元素的类型

lua_type(lua_State* L, int index);

类型包括 LUA_TNIL, LUA_TBOOLEAN, LUA_TNUMBER, LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA

验证栈中的元素类型;

lua_is*(lua_State* L, int index)

其实有了lua_type()完全可以自己写类型验证的 每必要使用lua提供的API

比如可以定义

 bool lua_is_number (lua_State* L, int index)  {
return lua_type(L, index) == LUA_TNUMBER ? true : false;
}

所以完全是可以利用lua_type来自行定义对栈中元素的验证的。

获取栈中元素的类型的字符串表示:

lua_typename(lua_State*, int )这里的int值是通过lua_type()获取到的值

其实这些都可以通过lua_type(lua_State*)来进行实现

const char*  lua_type_str(int lua_type) {
static char type[LUA_TYPE_LEN_MAX];
switch (lua_type) {
case LUA_TNIL:
strcpy(type, "nil");
break; case LUA_TBOOLEAN:
strcpy(type, "boolean");
break; case LUA_TNUMBER:
strcpy(type, "number");
break; case LUA_TSTRING:
strcpy(type, "string");
break; case LUA_TTABLE:
strcpy(type, "table");
break; case LUA_TTHREAD:
strcpy(type, "thread");
break; case LUA_TFUNCTION:
strcpy(type, "function");
break; case LUA_TUSERDATA:
strcpy(type, "userdata");
break; default:
strcpy(type, "unknown");
break;
}
return type;
}

这样就可以实现你自己的栈元素类型的字符串显示了

获取指定位置的元素可以使用lua_to*(lua_State*, int )

int  lua_toboolean(lua_State*, int);

lua_Number lua_tonumber(lua_State*, int);

lua_Integer lua_tointeger(lua_State*, int );

const char* lua_tolstring(lua_State*, int, size_t length);

lua_gettop(lua_State*)      得到栈中元素的个数

lua_settop(lua_State*, int index)

设置栈中元素的个数,如果设置的值比当前栈中元素的个数多,则将多出的那部分全部丢弃,如果设置的值比当前栈中元素个数多,则将新加的值全部设置为nil.

lua_pushvalue(lua_State*, int index) 将index位置的值的副本压入栈顶

lua_remove(lua_State* L, int index)将指定位置的元素删除,并且其上的所有元素下移

lua_insert(lua_State*, int index) 将指定位置之上的元素上移,空出该位置,并将栈顶元素移到此处

lua_replace(lua_State*, int index)将栈顶元素弹出,并将其设置到指定的索引上。

lua_pop是以一个宏的形式进行定义的

#define    lua_pop(L, n)     lua_settop(L, -(n) - 1);

比如弹出栈顶的元素则可以使用 lua_pop(L, 1)

Lua中C API栈操作的更多相关文章

  1. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  2. Lua 中的string库(字符串函数库)总结

    (字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...

  3. Lua中的一些库(1)

    [数学库] 数学库(math)由一组标准的数学函数构成.这里主要介绍几个常用的函数,其它的大家可以自行百度解决. 三角函数(sin,cos,tan……)所有的三角函数都使用弧度单位,可以用函数deg( ...

  4. Lua中的字符串函数库

    字符串库中的一些函数是非常简单的: string.len(s)          返回字符串s的长度:string.rep(s, n)      返回重复n次字符串s的串:你使用string.rep( ...

  5. 引用kernel32.dll中的API来进行串口通讯

    串口通讯可以引出kernel32.dll中的API来操作,相关源码如下:using System;using System.Runtime.InteropServices; namespace Tel ...

  6. lua中得栈

    如果你看了LUA的文档,那么就应该很清楚LUA与C交互数据时都是用到LUA中所谓的stack.那么当我调用lua_open函数之后栈是什么样的呢?空的(luaopen_base等会往栈上加进一些东西) ...

  7. c调用 lua 栈操作

    转自https://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 打算记录一些lua_api, 可能会觉得lua文档中已经说的很清楚了, ...

  8. Lua的栈及基本栈操作

    Lua的栈及基本栈操作 https://blog.csdn.net/mydriverc2/article/details/51134737 https://blog.csdn.net/mydriver ...

  9. Lua和C++交互 学习记录之二:栈操作

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

随机推荐

  1. Ext.js性能优化漫谈

    Ext.js是一个用于建立企业级应用的纯JS框架.毫无疑问,它为我们提供了大量的组件,比如container,panel,field,grid,这些组件使用起来很方便,不需要去写js和html,但是e ...

  2. React与Typescript整合

    0. Typescript Typescript对于前端来说可以说是越来越重要了,前端的很多项目都用Typescript进行了重构.这主要得益于Typescript有比较好的类型支持,在编码的过程中可 ...

  3. em、rpx和px的换算

    rpx:对于小程序开发,所用的单位都是rpx,而不论哪个型号的手机,屏幕宽度都是750rpxrpx与px的转换,根据设计稿换算例如:设计稿750px宽度,ps上量出或者标出的宽度是多少,那么就定义多少 ...

  4. 云中沙箱学习笔记2-ECS之初体验

    1.1 背景知识 云服务器(Elastic Compute Service, 简称ECS),是一种简单高效,处理能力可以弹性伸缩的计算服务.ECS的相关术语说明如下: --实例(Instance):是 ...

  5. 两台服务器共享文件Windows和Linux

    最近遇到一个问题,新装的两台服务器死活就是挂载不上samba服务器上的文件,在输入mount挂载命令的时候提示只读什么的,尝试了在挂载的时候用只读的方式去挂载也是不行,最终发现了,缺少安装cifs包, ...

  6. Final修饰的字段是否可以通过反射设置值

    案发现场 经常听说final修饰的字段是常量不能改变的他的值,但是以外发现 Integer.java源码中的字段“value”是final,但是可以通过反射改变他的值. public final cl ...

  7. redis 并发测试安全测试代码

    package com.jd.ng.shiro.controller; import org.slf4j.Logger;import org.slf4j.LoggerFactory;import or ...

  8. export default{} 和 new Vue()都是什么意思

    在生成.导出.导入.使用 Vue 组件的时候,有些新手就会常常被位于不同文件的 new Vue() 和 export default{} 搞得晕头转向.它们含义到底是什么,又有什么异同呢? 首先,Vu ...

  9. springboot 中的 thymeleaf 页面进阶小知识

    我们做好了登录页,那设计一个场景吧,比如我们登录后跳转到公司主页,想从公司主页再跳转到员工列表页: 这样的场景我们该如何实现,首先要知道一些基础知识,就是SpringBoot的一些关于请求的架构知识: ...

  10. LightOJ 1079 Just another Robbery (01背包)

    题目链接 题意:Harry Potter要去抢银行(wtf???),有n个银行,对于每个银行,抢的话,能抢到Mi单位的钱,并有pi的概率被抓到.在各个银行被抓到是独立事件.总的被抓到的概率不能超过P. ...