Lua,Lua API,配置文件

想像一个场景:你的c程序需要有一个窗口,你想让用户可以自定义窗口大小。方法很多,比如使用环境变量,或键值对的文件。不管怎样,你需要解析它。使用lua配置文件是个不错的选择。

首先,你可以定义如下的配置文件:

--define window size

width = 100

height = 50

然后,我们写个函数来解析它,使用lua API 来指导lua解析配置。,下面是完整的程序:

#include <stdio.h>

#include <string.h>

#include <lua.h>

#include <lauxlib.h>

#include <lualib.h>

void load(lua_State* L, const char* fname, int *w, int *h)

{

if (luaL_loadfile(L, fname) || lua_pcall(L, 0, 0, 0)) {

error(L, "error:%s", lua_tostring(L, -1));

}

lua_getglobal(L, "width");

lua_getglobal(L, "height");

if (!lua_isnumber(L, -2)) {

error(L, "width shuld be num.");

}

if (!lua_isnumber(L, -1)) {

error(L, "height shuld be num");

}

*w = lua_tointeger(L, -2);

*h = lua_tointeger(L, -1);

}

int main()

{

lua_State *L = luaL_newstate();

luaL_openlibs(L);

int w, h;

load(L, "config", &w, &h);

printf("%d,%d", w, h);

return 0;

}

使用lua配置文件有什么好处呢?我想,大概有以下理由:

1.Lua为你处理了所有语法细节(包括错误)

2.配置内容可读性好,甚至你可以写上注释。

3.可以很容易添加新的配置信息。

(完)

时间: 2024-10-25 20:26:21

Lua,Lua API,配置文件的相关文章

VC和VS调用Lua设置以及Lua C API使用。

通过c++调用lua 脚本,    环境VC++6.0    lua  sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_openlibs()函数加载Lua库.3.使用luaL_dofile()加载脚本并运行脚本.4. lua_close()来关闭Lua指向解释器的指针. 5.调用lua_getglobal()将add()函数压入栈顶,add()为lua函数.6.第一个参数x,通过调用lua_pushnumber()入栈.7

Lua常用API

转自:http://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 1.  建一个新表 void lua_createtable (lua_State *L, int narr, int nrec) 创建一个新的table, 并把它放在栈顶. narr和nrec分别指定该table的array部分和hash部分的预分配元素数量 无返回值 栈高度+1, 栈顶元素是新table #define lua_newtable(L) lua_cr

lua c API

Lua与C是通过栈进行交换数据的,这个栈与我们在数据结构中所说的栈类似,遵循LIFO规则.下面是从官方文档上截取的关于栈操作的 C API,对其进行分类整理了. 1. 压入元素: void lua_pushnil (lua_State *L); void lua_pushboolean(lua_State *L, int bool); void lua_pushnumber(lua_State *L, double n); void lua_pushinteger (lua_State *L, 

Lua C Api lua_gettable 、lua_settable 、lua_next 使用详解

之前一直没理清lua_gettable和lua_settable的使用,今天理清了,顺便就做下笔记了.1.lua_gettable void lua_gettable (lua_State *L, int index); 把t[k] 值压入堆栈,这里的 t 是指有效索引 index 指向的值,而 k 则是栈顶放的值.这个函数会弹出堆栈上的 key,把结果放在栈上相同位置. 下面举个例子: // 将一个key放到栈顶,这个key为1.如果你的key是字符串,那就用lua_pushstring. l

Lua C API 书籍

https://www.oreilly.com/library/view/creating-solid-apis/9781491986301/ https://www.lua.org/notes/ltn005.html http://www.moonsharp.org/objects.html 原文地址:https://www.cnblogs.com/lilei9110/p/10148419.html

Lua的API函数

1. 基础库 我们在整个教程中使用了各种主题下的基本库. 下表提供了相关页面的链接,并列出了本Lua教程各部分所涵盖的功能. 编号 库/方法 作用 1 错误处理 包括错误处理函数,如断言, 错误,如Lua错误处理中所述. 2 内存管理 包括与垃圾收集相关的自动内存管理功能, 如Lua垃圾收集中所述. 3 dofile ([filename]) 它打开文件并以块的形式执行文件的内容. 4 _G 因此是保存全局环境的全局变量(即_G._G = _G). 5 getfenv ([f]) 返回函数使用的

Hibernate3 Api,配置文件详解

1 api详解[多练] 1.1 体系结构 PO:persistent object ,用于与数据库交互数据.--dao层  (JavaBean + hbm ) BO:Business object 业务数据对象.--service层 VO:Value Object 值对象.--web层 开发中:直接使用JavaBean 描述三个对象. 1.2 Configuration 配置对象 l hibernate 核心配置文件种类 hibernate.cfg.xml 通常使用xml配置文件,可以配置内容更

[Lua]Lua高级教程Metatables

什么是Metatable metatable是Lua中的重要概念,每一个table都可以加上metatable,以改变相应的table的行为. Metatables举例 -- 声明一个正常的关系变量 lo_table = {} -- 声明空元表变量 lo_meta_table = {} -- 为关系变量t设置元表变量 setmetatable(lo_table, lo_meta_table) -- 获取一个关系变量的元表变量 getmetatable(lo_table) 上边的代码也可以写成一行

[Lua]Lua调用C/C++函数/库(函数压栈方式)

test.cpp文件 /*Lua调用C/C++函数/库(函数压栈方式)*/ #include<iostream> using namespace std; #include<lua.hpp> /* 当我们需要在Lua里面调用C/C++函数时,所有的函数都必须满足以下函数签名: typedef int (*lua_CFunction) (lua_State *L);换句话说,所有的函数必须接收一个lua_State作为参数,同时返回一个整数值.因为这个函数使用Lua栈作为参数,所以它

[Lua]Lua调用C/C++函数/库(动态链接方式)

新建DLL空的win32工程,新建test.cpp文件,内容如下 /*Lua调用C/C++函数/库(动态链接方式)*/ #include<iostream> using namespace std; #include<lua.hpp> static int math_abs(lua_State *L) { lua_pushnumber(L, abs((int)luaL_checknumber(L, 1))); return 1; } static int math_cos(lua_