1. 程式人生 > >lua學習總結——C API

lua學習總結——C API

1、lua與C語言通訊的主要方法是一個無所不在的虛擬棧。該棧由lua管理,lua只會改變棧的頂部,而C程式碼可以檢索棧中間的元素,甚至在棧的任意位置插入或刪除元素。

2、C語言沒有提供異常處理機制,lua使用C語言中的setjmp機制,這是一種類似於異常處理的機制。當編寫庫程式碼時(被lua呼叫的C函式)使用longjmp捕獲所有可能的錯誤;而編寫應用程式程式碼時(呼叫lua的C程式碼),必須提供一種捕獲錯誤的方法。

1)應用程式中錯誤程式碼處理:如果發生了記憶體分配錯誤,又不想結束應用程式,兩種做法:

(1)設定緊急函式,不要把控制權返還給lua;

(2)讓程式碼在保護模式下執行,呼叫lua_pcall()函式執行。

2)庫程式碼中錯誤處理:

當一個C函式檢測到一個錯誤時,就應該呼叫lua_error,lua_error會清理lua中所有需要清理的東西,然後跳轉回發起執行的那個lua_pcall,並附上一條錯誤訊息。