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

來源:互聯網
上載者:User

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源碼樹一起編譯

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.