前言#
今天来看一个退出函数,说起退出函数估计大家都会想起c语言中的exit()
,今天要说的就是exit()
函数,只不过不是C语言的函数,而是lua中的os.exit()
函数,但让他们的作用都是一样的,就是退出程序。
内容#
os.exit()##
- 原型:os.exit(code)
- 解释:相当于C的exit函数,终止主程序,code为返回值。
Usage##
- 首先我们来新建一个文件命名为exittest.lua的文件然后编写如下代码:
function func_testexit()
print("lua --> func_testexit start");
io.read();
os.exit(0); --==>os.exit() 用法
print("lua --> func_testexit end");
io.read();
end
- 然后来编写c++调用函数
lua_State *L = lua_open();
luaL_openlibs(L);
printf("c++ --> before call func_testexit\n");
luaL_dofile(L,"exittest.lua"); // 加载执行lua文件
lua_getglobal(L, "func_testexit"); // 函数入栈
lua_pcall(L, 0, 0, 0); // 打印信息
printf("c++ --> after call func_testexit\n");
lua_close(L); // 关闭lua环境
- 运行结果:
总结#
- 需要注意的是,
os.exit()
不仅仅会退出lua运行环境,连宿主程序也会退出,代码中的io.read();
仅仅为了可以看到打印信息,否则宿主程序直接退出就什么也看不到了。 - 我们可以发现代码
print("lua --> func_testexit end");
和printf("c++ --> after call func_testexit\n");
是无论如何也执行不到的。 - 利用
os.exit()
可以退出宿主程序,我们可以在lua解释器中使用这个函数已退出解释器,使用方法如下:
- 我们也可以来看一下这个函数的实现源码,其实就是调用了c语言的exit():
static int os_exit (lua_State *L) {
exit(luaL_optint(L, 1, EXIT_SUCCESS));
}
//其中c语言中有如下定义:
/* Definition of the argument values for the exit() function */
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1