1.简介
  Lua与C/C++结合是很紧密的, Lua与C++交互是建立在Lua与C的基础上的, 所

  以偶先从Lua与C讲起.

  正如第一讲所说, 运行Lua程序或者说调用Lua主要有两种方式:

  * 通过命令行执行"Lua"命令

  * 通过Lua的C库

  虽然此前偶们一直用第一种方式, 但偶要告诉你, 通过Lua的C库执行才是游戏中

  常用的方式.

   2.Lua的C库

  Lua的C库可以做为Shared Library调用, 但一般开发游戏时会把Lua的所有源程序

  都包含在内, 并不把Lua编译成共享库的形式. 因为Lua程序只有100多K, 而且几乎

  可以在任何编译器下Clean Compile. 带Lua源程序的另一个好处时, 可以随时对Lua

  本身进行扩充, 增加偶们所需的功能.

  Lua的C库提供一系列API:

* 管理全局变量 


  * 管理tables 


  * 调用函数 


  * 定义新函数, 这也可以完全由C实现 


  * 垃圾收集器Garbage collector, 虽然Lua可以自动进行, 但往往不是立即执行的, 


  所以对实时性要求比较高的程序, 会自己调用垃圾收集器 


  * 载入并执行Lua程序, 这也可以由Lua自身实现 


  * 任何Lua可以实现的功能, 都可以通过Lua的C API实现, 这对于优化程序的运行速度 


  有帮助. 经常调用的共用的Lua程序片断可以转成C程序, 以提高效率. 连Lua都是C写的 


  还有什么C不能实现呢? 


   
3.Lua与C集成的例子 


  例e10.c 


  /* A simple Lua interpreter. */ 


  #include 
 
 

  #include 
  
  

  int main(int argc, char *argv[]) { 
  

  char line[BUFSIZ]; 
  

  lua_State *L = lua_open(0); 
  

  while (fgets(line, sizeof(line), stdin) != 0) 
  

  lua_dostring(L, line); 
  

  lua_close(L); 
  

  return 0; 
  

  } 
  

  编译 
  

  Linux/Cygwin 
  

  * 先编译Lua, 并把头文件放入include路径 
  

  * gcc e10.c -llua -llualib -o e10 
  

  VC6/VC2003 
  

  * 先编译Lua, 在Option中设置头文件和库文件路径 
  

  * 新建工程,在工程配置中加入附加库lua.lib和lualib.lib 
  

  * 编译成exe 
  

  运行结果 
  

  本程序的功能是实现一个Lua解释器, 输入的每行字符都会被解释成Lua并执行. 
  

  程序说明 
  

  * #include 
  
    包含lua头文件, 然后才可以使用API 
   

  * lua_State *L = lua_open(0) 打开一个Lua执行器 
   

  * fgets(line, sizeof(line), stdin) 从标准输入里读入一行 
   

  * lua_dostring(L, line) 执行此行 
   

  * lua_close(L) 关闭Lua执行器 
   

  例e11.c 
   

  /* Another simple Lua interpreter. */ 
   

  #include 
    
    

  #include 
     
     

  #include 
      
      

  int main(int argc, char *argv[]) { 
      

  char line[BUFSIZ]; 
      

  lua_State *L = lua_open(0); 
      

  lua_baselibopen(L); 
      

  lua_iolibopen(L); 
      

  lua_strlibopen(L); 
      

  lua_mathlibopen(L); 
      

  while (fgets(line, sizeof(line), stdin) != 0) 
      

  lua_dostring(L, line); 
      

  lua_close(L); 
      

  return 0; 
      

  } 
      

  运行结果 
      

  本程序的功能是实现一个Lua解释器, 输入的每行字符都会被解释成Lua并执行. 
      

  与上例不同的是, 本例调用了Lua的一些标准库. 
      

  程序说明 
      

  * #include 
      
        包含Lua的标准库 
       

  * 以下这几行是用来读入Lua的一些库, 这样偶们的Lua程序就可以有更多的功能. 
       

  lua_baselibopen(L); 
       

  lua_iolibopen(L); 
       

  lua_strlibopen(L); 
       

  lua_mathlibopen(L);



   4.试试看

  把上面两个小例子在你熟悉的编译器中编译执行, 并试试能否与Lua源码树一起编译