Lua中文语言编程源码-第四节,更改linit.c初始化库函数, 使Lua加载中文库关键词(与所有的基础库相关)

源码已经更新在CSDN的码库里:

复制代码
git clone https://gitcode.com/funsion/CLua.git

在src文件夹下的linit.c初始化库的函数,用于lua.c和其他客户端。

增加加载中文库宏名列表,保留英文库宏名列表。

原始的代码为:
复制代码
static const luaL_Reg loadedlibs[] = {
  {LUA_GNAME, luaopen_base},
  {LUA_LOADLIBNAME, luaopen_package},
  {LUA_COLIBNAME, luaopen_coroutine},
  {LUA_TABLIBNAME, luaopen_table},
  {LUA_IOLIBNAME, luaopen_io},
  {LUA_OSLIBNAME, luaopen_os},
  {LUA_STRLIBNAME, luaopen_string},
  {LUA_MATHLIBNAME, luaopen_math},
  {LUA_UTF8LIBNAME, luaopen_utf8},
  {LUA_DBLIBNAME, luaopen_debug},
  {NULL, NULL}
};
更改成以下代码:
复制代码
static const luaL_Reg loadedlibs[] = {
  {LUA_GNAME, luaopen_base},        /* Lua基础库 */
  {LUA_LOADLIBNAME, luaopen_package}, /* Lua包加载库 */
  {LUA_LOADLIBNAME_C, luaopen_package}, 
  {LUA_COLIBNAME, luaopen_coroutine}, /* Lua协程库 */
  {LUA_COLIBNAME_C, luaopen_coroutine}, 
  {LUA_TABLIBNAME, luaopen_table},    /* Lua表库 */
  {LUA_TABLIBNAME_C, luaopen_table},    
  {LUA_IOLIBNAME, luaopen_io},        /* Lua I/O库 */
  {LUA_IOLIBNAME_C, luaopen_io},      
  {LUA_OSLIBNAME, luaopen_os},        /* Lua操作系统库 */
  {LUA_OSLIBNAME_C, luaopen_os},      
  {LUA_STRLIBNAME, luaopen_string},   /* Lua字符串库 */
  {LUA_STRLIBNAME_C, luaopen_string}, 
  {LUA_MATHLIBNAME, luaopen_math},    /* Lua数学库 */
  {LUA_MATHLIBNAME_C, luaopen_math},  
  {LUA_UTF8LIBNAME, luaopen_utf8},    /* Lua UTF-8库 */
  {LUA_DBLIBNAME, luaopen_debug},     /* Lua调试库 */
  {LUA_DBLIBNAME_C, luaopen_debug},   
  {NULL, NULL}                         /* 结束标志 */
};

为了保证中英文宏名都可以加载,以便你可以复制英文原码来进行更改。所以保留了英文的宏名列表,这样就只能使用两个库的宏名表,

LUA_COLIBNAME, luaopen_coroutine 英文协程宏名,协程加载库名,

LUA_COLIBNAME_C, luaopen_coroutine 中文协程宏名,协程加载库名,

其实它们都是加载同样的库名,算是加载了2次,以Lua内部算法,应该只会加载一次。

更改完之后,同样需要重新编译Lua的源码,实现以上列出的关键词的中文化。

注意,在Window系统下编译Lua, 最好将所有Lua的源码,重新保存成ANSI格式的文件,刚下载的默认的源码会是UTF-8格式的。

这个事情说三遍,

1,不然就会出现,Window下的UTF-8源码可编译,但Shell里的中文输出会乱码。

2,要不然就是Window的ANSI源码不可编译(假如你没做以上步骤),

3,如果是用ANSI格式的源码编译的Lua.exe,对应的,你在Window下写的Lua程序也是需要保存成ANSI格式的。这样就可以在Shell里输出正确的中文显示。

因为只是改库名,这里就先不用例程演示了。请看接下来的文章,改完协程再上例程。
相关推荐
伍哥的传说5 分钟前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔24 分钟前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔32 分钟前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing1023292942 分钟前
Day03_刷题niuke20250915
c语言
我是菜鸟0713号1 小时前
Qt 中 OPC UA 通讯实战
开发语言·qt
JCBP_1 小时前
QT(4)
开发语言·汇编·c++·qt·算法
Brookty1 小时前
【JavaEE】线程安全-内存可见性、指令全排序
java·开发语言·后端·java-ee·线程安全·内存可见性·指令重排序
百锦再1 小时前
[特殊字符] Python在CentOS系统执行深度指南
开发语言·python·plotly·django·centos·virtualenv·pygame
Anson Jiang1 小时前
浏览器标签页管理:使用chrome.tabs API实现新建、切换、抓取内容——Chrome插件开发从入门到精通系列教程06
开发语言·前端·javascript·chrome·ecmascript·chrome devtools·chrome插件
会开花的二叉树1 小时前
继承与组合:C++面向对象的核心
java·开发语言·c++