lua Capi
2021-03-10 04:29
标签:ESS fine index 源码 常量 lse cto check 返回 一、C环境使用mingw 的gcc 可从这里下载完整版那的mingw: http://pan.baidu.com/s/1crx1s 可参考该设置环境变量及编译lua的教程:https://www.cnblogs.com/jessicas/articles/4477655.html?tdsourcetag=s_pctim_aiomsg lua要使用该mingw进行编译;记住不要使用5.1.5版本的lua;编译会有问题 我使用sublime进行编码,可以设置如下的编译配置: 二、lua跟c之间的参数传递使用的是栈的方式:fifo 关于lua栈的操作方法有如下testStack里面用到的; 三、查询元素 有lua_is*(lua_State* L, int index) 查询对应的是什么类型的元素 lua_isnumber,lua_isstring, lua_istable等 isnumber判断的是该值能否转成数字,不一定是数字。所以对于任何数字,isstring一定是返回真。 查看类型有另外一个函数:lua_type 返回该类型,他们用常量代替; 获取值的有lua_tostring,lua_tolstring, 查看源码可以发现 lua_tostring是一个宏; 返回的是const char* 类型的;第三个参数可以返回字符串的长度;如下所示 向查询当前栈中有多少个值,可以使用lua_gettop()函数 默认情况下lua的栈可以装20个值;如果任务比较多,可以使用 lua_checkstack这个函数来检查栈中是否有足够的空间。如果返回0则表示false,1则表示容纳的下。 lua Capi 标签:ESS fine index 源码 常量 lse cto check 返回 原文地址:https://www.cnblogs.com/czwlinux/p/12711992.html{
"working_dir": "$file_path",
"cmd": "gcc -Wall \"$file_name\" -o \"${file_base_name}.exe\" -llua",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"selector": "source.c",
"variants":
[
{
"name": "Run",
"shell_cmd": "gcc -Wall \"$file_name\" -o \"${file_base_name}.exe\" -llua && start cmd /c \"\"${file_path}/${file_base_name}.exe\" & pause\""
}
]
}
void stackDump(lua_State* L) {
int i;
int top = lua_gettop(L);
for (i = 1; i i) {
int t = lua_type(L, i);
switch(t) {
case LUA_TSTRING: {
printf("‘%s‘", lua_tostring(L, i));
break;
}
case LUA_TBOOLEAN: {
printf(lua_toboolean(L, i)?"true":"false");
break;
}
case LUA_TNUMBER: {
printf("%g", lua_tonumber(L, i));
break;
}
default: {
printf("%s", lua_typename(L, t));
break;
}
}
printf(" ");
}
printf("\n");
}
void TestStack(lua_State* L) {
lua_pushboolean(L, 1);
lua_pushnumber(L, 10);
lua_pushnil(L);
lua_pushstring(L, "hello");
stackDump(L);
lua_pushvalue(L, -4); // 插入从栈顶往下数第四个对应的那个值
stackDump(L);
lua_replace(L, 3); // 将栈顶的值取出,替换从栈底往上数第三个的值
stackDump(L);
lua_settop(L, 6); // 将栈的大小设置为6;如果之前栈大于6,则变成6;如果之前栈小于6,则新增的栈的位置赋nil
stackDump(L);
lua_remove(L, -3); // 移除从栈顶往下数,第三个的栈值
stackDump(L);
// lua_settop(L, -5); // 相当于删除栈顶的5个元素
lua_insert(L, -4); // 将栈顶的值取出插入到从栈顶往下数第四个的位置;则之后的三个值网上移。注意这个跟lua_replace的区别
stackDump(L);
}
#define lua_tostring(L,i) lua_tolstring(L, (i), NULL)
const char *(lua_tolstring) (lua_State *L, int idx, size_t *len);