前言
Lua
本身是用C
编写的,因此扩展和嵌入其他语言是非常便捷的。
C函数和参数
C
语言是用汇编实现的,在汇编语言中可没有函数的概念,与函数对应的是叫做子过程的东西,子过程就是一段指令,一个子过程与它调用的子过程之间通过栈来进行参数的传递交互。在一个子过程在调用别的子过程之前,会按照约定的格式将要调用的子过程需要的参数入栈,在被调用的子过程中,可以按照约定的规则将参数从栈中取出。同理,对于返回值的传递也同样是通过堆栈进行的。C语言约定的参数放入栈中的格式,就是“调用惯例”。C语言的函数原型则决定了压入栈中的参数的数量和类型。
Lua的虚拟堆栈
由于
C
和Lua
是不同层次的语言,因此C
语言的变量和Lua
中的变量以及函数不能直接的交互。Lua
和C
之间的交互巧妙的模拟了C
语言的堆栈,Lua
和C
语言之间的相互调用和访问都通过堆栈来进行,巧妙的解决了不同类型之间变量相互访问的问题。画个示意图: