向栈中压入数据:

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. spark复习笔记(6):数据倾斜

    一.数据倾斜 spark数据倾斜,map阶段对key进行重新划分.大量的数据在经过hash计算之后,进入到相同的分区中,zao

  2. slot-scope 插槽 的使用 ——'<template slot-scope="page">'

    slot-scope="page"slot-scope 是一个插槽,拿外面的数据,可以获取当前一行的数据page.row.pageId 拿到当前行数据的pageId注意:slot- ...

  3. JAVA对象序列化和反序列化学习

    JAVA序列化就是将JAVA对象转化为字节序列的过程,而JAVA反序列化就是将字节序列转化为JAVA对象的过程. 这一过程是通过JAVA虚拟机独立完成,所以一个对象序列化后可以在任意时间和任意机器上反 ...

  4. CentOS7搭建Hadoop2.8.0集群及基础操作与测试

    环境说明 示例环境 主机名 IP 角色 系统版本 数据目录 Hadoop版本 master 192.168.174.200 nameNode CentOS Linux release 7.4.1708 ...

  5. C#Stopwatch的简单计时 [收藏]

    Stopwatch 类 命名空间:System.Diagnostics.Stopwatch 实例化:Stopwatch getTime=new Stopwatch(); 开始计时:getTime.St ...

  6. linux 配置 Sersync

    [root@SERSYNC sersync]# cp conf/confxml.xml conf/confxml.xml.bak.$(date +%F) [root@SERSYNC sersync]# ...

  7. Email常用缩写

    Abbreviations Used in email Abbreviation Meanings ATM at the moment AFAIK as far as I know BTW by th ...

  8. SSM项目web.xml等配置文件中如何查找类的全路径名?

    如题, web.xml,applicationContext.xml 等配置文件中,有时不会出现自动提示类的名字,这时如何查找类的全路径名,如下图所示: 1.鼠标右键单击菜单栏Navigate选项,选 ...

  9. 基于canvas实现的高性能、跨平台的股票图表库--clchart

    什么是 ClChart? ClChart是一个基于canvas创建的简单.高性能和跨平台的股票数据可视化开源项目.支持PC.webApp以及React Native和Weex等平台.在React Na ...

  10. (转)深入详解Java线程池——Executor框架

    转:https://yq.aliyun.com/articles/633782?utm_content=m_1000015330 在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定 ...