日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
通過例子學習Lua(5)—Lua與C交互入門

1.簡介

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

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

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

* 通過Lua的C庫

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

2.Lua的C庫

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

Lua的C庫提供一系列API:

* 管理全局變量

* 管理tables

* 調(diào)用函數(shù)

* 定義新函數(shù), 這也可以完全由C實現(xiàn)

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

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

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

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

運行結果

本程序的功能是實現(xiàn)一個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;   } 

運行結果

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

與上例不同的是, 本例調(diào)用了Lua的一些標準庫.

程序說明

* #include 包含Lua的標準庫

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

lua_baselibopen(L);

lua_iolibopen(L);

lua_strlibopen(L);

lua_mathlibopen(L);

4.試試看

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


當前題目:通過例子學習Lua(5)—Lua與C交互入門
文章分享:http://m.5511xx.com/article/dphjepc.html