自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過例子學習Lua(5)—Lua與C交互入門

開發(fā) 前端
Lua與C/C++結合是很緊密的, Lua與C++交互是建立在Lua與C的基礎上的, 所以偶先從Lua與C講起.

1.簡介

Lua與C/C++結合是很緊密的, Lua與C++交互是建立在Lua與C的基礎上的, 所以偶先從Lua與C講起.

正如***講所說, 運行Lua程序或者說調用Lua主要有兩種方式:

* 通過命令行執(zhí)行"Lua"命令

* 通過Lua的C庫

雖然此前偶們一直用***種方式, 但偶要告訴你, 通過Lua的C庫執(zhí)行才是游戲中常用的方式.

2.Lua的C庫

Lua的C庫可以做為Shared Library調用, 但一般開發(fā)游戲時會把Lua的所有源程序都包含在內, 并不把Lua編譯成共享庫的形式. 因為Lua程序只有100多K, 而且?guī)缀蹩梢栽谌魏尉幾g器下Clean Compile. 帶Lua源程序的另一個好處時, 可以隨時對Lua本身進行擴充, 增加偶們所需的功能.

Lua的C庫提供一系列API:

* 管理全局變量

* 管理tables

* 調用函數

* 定義新函數, 這也可以完全由C實現

* 垃圾收集器Garbage collector, 雖然Lua可以自動進行, 但往往不是立即執(zhí)行的,所以對實時性要求比較高的程序, 會自己調用垃圾收集器

* 載入并執(zhí)行Lua程序, 這也可以由Lua自身實現

* 任何Lua可以實現的功能, 都可以通過Lua的C API實現, 這對于優(yōu)化程序的運行速度有幫助. 經常調用的共用的Lua程序片斷可以轉成C程序, 以提高效率. 連Lua都是C寫的還有什么C不能實現呢?

3.Lua與C集成的例子

例e10.c

  1. /* A simple Lua interpreter. */ 
  2. #include 
  3. #include 
  4. int main(int argc, char *argv[]) { 
  5. char line[BUFSIZ]; 
  6. lua_State *L = lua_open(0); 
  7. while (fgets(line, sizeof(line), stdin) != 0) 
  8. lua_dostring(L, line); 
  9. lua_close(L); 
  10. return 0; 

編譯

Linux/Cygwin

* 先編譯Lua, 并把頭文件放入include路徑

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

VC6/VC2003

* 先編譯Lua, 在Option中設置頭文件和庫文件路徑

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

* 編譯成exe

運行結果

本程序的功能是實現一個Lua解釋器, 輸入的每行字符都會被解釋成Lua并執(zhí)行.

程序說明

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

* lua_State *L = lua_open(0) 打開一個Lua執(zhí)行器

* fgets(line, sizeof(line), stdin) 從標準輸入里讀入一行

* lua_dostring(L, line) 執(zhí)行此行

* lua_close(L) 關閉Lua執(zhí)行器

例e11.c

  1. /* Another simple Lua interpreter. */ 
  2. #include 
  3. #include   
  4. #include   
  5. int main(int argc, char *argv[]) {   
  6. char line[BUFSIZ];   
  7. lua_State *L = lua_open(0);   
  8. lua_baselibopen(L);   
  9. lua_iolibopen(L);   
  10. lua_strlibopen(L);   
  11. lua_mathlibopen(L);   
  12. while (fgets(line, sizeof(line), stdin) != 0)   
  13. lua_dostring(L, line);   lua_close(L);   return 0;   } 

運行結果

本程序的功能是實現一個Lua解釋器, 輸入的每行字符都會被解釋成Lua并執(zhí)行.

與上例不同的是, 本例調用了Lua的一些標準庫.

程序說明

* #include 包含Lua的標準庫

* 以下這幾行是用來讀入Lua的一些庫, 這樣偶們的Lua程序就可以有更多的功能.

lua_baselibopen(L);

lua_iolibopen(L);

lua_strlibopen(L);

lua_mathlibopen(L);

4.試試看

把上面兩個小例子在你熟悉的編譯器中編譯執(zhí)行, 并試試能否與Lua源碼樹一起編譯

原文鏈接:http://tech.it168.com/j/2008-02-14/200802141425224.shtml

責任編輯:陳四芳 來源: 來自ITPUB論壇
相關推薦

2013-12-13 16:53:00

Lua腳本語言C++

2013-12-13 15:42:32

Lua腳本語言

2013-12-13 15:48:52

Lua腳本語言

2013-12-12 17:30:03

Lua例子

2013-12-13 15:54:32

Lua腳本語言

2011-08-23 16:59:16

C++LUA腳本LUA API

2021-01-12 06:42:50

Lua腳本語言編程語言

2011-08-23 11:13:56

Lua

2011-08-22 16:59:28

Lua

2011-08-25 10:40:21

Lua游戲

2011-08-25 10:35:14

Lua語言函數

2011-08-24 17:05:01

Lua

2011-08-25 13:22:40

CEGUILua腳本

2009-09-09 10:50:55

Scala例子Scala與Java

2011-08-22 18:08:09

Lua腳本

2011-08-22 17:41:23

LUA 腳本 語言

2011-08-24 13:27:07

Lua 游戲C接口腳本

2011-08-23 13:27:46

Luaglobal變量

2013-12-13 17:33:22

Lua對象管理

2011-08-22 18:00:53

Lua語言
點贊
收藏

51CTO技術棧公眾號