Lua学习笔记——Lua作为库嵌入到C中

本文详细记录了如何将Lua作为一种库嵌入到C程序中,涵盖了Lua的表、函数、内存分配以及文件操作等核心概念,为C开发者提供了一条深入理解Lua并与之集成的路径。
摘要由CSDN通过智能技术生成
/*C++程序接收用户输入的字符串,把该字符串作为Lua的一个chunk送到stack中编译执行。
*/
#include <stdio.h>
#include <string.h>
#include <lua.hpp>

int main(int argc, char* argv[]){
	char buff[256];
	int error = 0;
	lua_State* L=lua_open();
	if(0 == L){
		return -1;
	}
	luaL_openlibs(L);
	
	while (fgets(buff, sizeof(buff), stdin) != 0){
		error = luaL_loadbuffer(L, buff, strlen(buff), \
			"line") || lua_pcall(L, 0, 0, 0);
		if(error){
			fprintf(stderr, "%s", lua_tostring(L, -1));
			lua_pop(L, 1);
		}
	}

	lua_close(L);
	return 0;
}
/*
函数luaL_loadbuffer编译一段字符串为chunk, lua_pcall执行chunk.
lua_tostring(L, -1)拿到栈顶元素,并将其转换为字符串
*/
/*
@param errfunc if errfunc is 0, then error message returned on the stack is exactly the original error message. otherwise, errfunc is the stack index of an error handler function.In case of runtime errors, this function will be called with error message and its return value  will be the message returned on the stack by lua_pcall.
@return zero in case of success or one of the following error codes(definded in lua.h)
LUA_ERRRUN, LUA_ERRMEM, LUA_ERRERR
int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc)

Loads a buffer as a Lua chunk.
@param name is the chunk name.
@return the same with lua_load function. 0 in case of success or LUA_ERRSYNTAX, LUA_ERRMEM.
int luaL_loadbuffer(lua_State* L, const char* buff, size_t sz, const char* name)

Changes in the API(Lua 5.1)
--The luaopen_* functions(to open libraries) cannot be  called directly, like 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值