lua例子(进出栈)
2024-08-28 11:17:56
#include <stdio.h>
extern "C"
{
#include "lua-5.2.2/src/lauxlib.h"
#include "lua-5.2.2/src/lualib.h"
#include "lua-5.2.2/src/lstate.h"
}
//lua与c交互栈的索引,假如栈中有5个元素
//5 -1
//4 -2
//3 -3
//2 -4
//1 -5
void stackDump(lua_State* L)
{
int i = ;
int top = lua_gettop(L);//获取栈中元素的个数,即栈顶元素的索引
for (int i = ; i < top; i++)
{
int t = lua_type(L, i);//返回栈中元素的类型
switch (t)
{
case LUA_TSTRING:
printf("%s", lua_tostring(L, i));//从栈中i索引位置取字符串,返回字符串的指针,对于字符串指针不能在函数外部,函数返回后会清理栈
break;
case LUA_TBOOLEAN: /* booleans */
printf(lua_toboolean(L, i) ? "true" : "false");
break;
case LUA_TNUMBER: /* numbers */
printf("%g", lua_tonumber(L, i));
break;
default: /* other values */
printf("%s", lua_typename(L, t));//转换类型码到类型名
break;
}
printf(" ");
}
//printf("\n");
} int main()
{
lua_State* L = luaL_newstate();
lua_pushboolean(L, );//向栈中压入bool类型
lua_pushinteger(L, );//向栈中压入int类型
lua_pushnil(L); //向栈中压入空值nil
lua_pushstring(L, "hello");//压入c风格字符串
stackDump(L);
/* true 10 nil `hello' */ lua_pushvalue(L, -); //压入堆栈上指定索引位置的拷贝到栈顶
stackDump(L);
///* true 10 nil `hello' true */ lua_replace(L, );
stackDump(L);
///* true 10 true `hello' */
/*Lua_insert移动栈顶元素到指定索引位置*/
lua_settop(L, ); //设置栈顶,不够补nil,多了删除,lua_settop(L, 0)清空栈
stackDump(L);
///* true 10 true `hello' nil nil */ lua_remove(L, -);//移除指定索引位置的元素,并将上面的元素下移
stackDump(L);
///* true 10 true nil nil */ lua_settop(L, -);
stackDump(L);
/* true */ lua_close(L);
getchar();
return ;
}
这个vs不知怎搞的老是出现蛋疼的问题
最新文章
- [水煮 ASP.NET Web API2 方法论](3-9)空气路由的设置
- ftp安全设置
- Android中设定背景图片平铺。
- ServletContext总结
- Jenkins任务启动的后台进程被自动kill
- [Cocos2d-x]解决Android平台ndk-build时不自动删除外部库
- hihoCoder 1595 : Numbers
- 【转】IE沙箱拖拽安全策略解析
- Police Stations CodeForces - 796D (bfs)
- constructor&;object 的对比
- Linux内核分析作业五
- 为caffe添加最简单的全通层AllPassLayer
- Bug04_spring注解报错
- 2018SDIBT_国庆个人第四场
- 题解 P5239 【回忆京都】
- 实验八 c排序算法
- October 05th 2017 Week 40th Thursday
- 20165318 2017-2018-2 《Java程序设计》第四周学习总结
- C#计算两个日期之间相差的天数
- [SP8372-TSUM]Triple Sums