Lua使用Clean C[5](Clean C是标准C/C++的一个子集。它只包含了C语言中一些必要特性。这样方便把Lua发布到更多的可能对C语言支持不完整的平台上。比如,对于没有 ctype.h 的C语言编译环境,Lua提供了 lctype.c 实现了一些兼容函数。)编写的源代码模块划分清晰,大部分模块被分解在不同的 .c 文件中实现,以同名的.h文件描述模块导出的接口。比如,lstring.c实现了Lua虚拟机中字符串池的相关功能,而这部分的内部接口则在lstring.h中描述。
它使用的代码缩进风格比较接近K&R风格(K&R风格将左花括号放在行尾,而右花括号独占一行。只对函数定义时有所例外。GNU风格左右花括号均独占一行,且把TAB缩进改为两个空格。不同的代码缩进风格还有许多其它细微差异。阅读不同开源项目代码将会有所体会。如果要参与到某个开源项目的开发,通常应该尊重该项目代码缩进风格,新增和修改保持一致。)并有些修改,例如函数定义的开花括号没有另起一行。同时,也搀杂了一些GNU风格,比如采用了双空格缩进、在函数名和小括号间加有空格。代码缩进风格没有好坏,但求统一。
Lua的内部模块暴露出来的API以luaX_xxx风格命名,即lua后跟一个大写字母表识内部模块名,而后由下划线加若干小写字母描述方法名。 供外部程序使用的API则使用lua_xxx的命名风格。这些在Lua的官方文档里有详细描述。定义在lua.h文件中。此外,除了供库开发用的luaL系列API 定(义在lauxlib.h中) 外,其它都属于内部API禁止被外部程序使用(理论上luaL系列API属于更高层次,对于Lua的第三方开发也不是必须的。这些API全部由Lua标准API实现,没有使用任何其他内部API)。