日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++17进阶(2)-Lua扩展(1)

發布時間:2025/3/12 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++17进阶(2)-Lua扩展(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lua的C API,也就是主機程序可用于與Lua通信的C函數集。所有API函數以及相關的類型和常量都在頭文件lua.h中聲明。
API中的任何功能(函數)都可以作為宏來提供。除非另有說明,所有這樣的宏都只使用它們的每個參數一次(除了第一個參數,它總是一個Lua狀態),因此不會產生任何隱藏的副作用。 但要注意,與大多數C庫一樣,Lua API函數不會檢查其參數的有效性或一致性,可通過使用定義的宏LUA_USE_APICHECK編譯Lua改變這種行為。
Lua庫是完全可重入的:它沒有全局變量。它將需要的所有信息保存在一個動態結構中,稱為Lua狀態。 每個Lua狀態都有一個或多個線程,它們對應于獨立的、協作的執行行。類型lua_State(盡管名稱不同)指的是線程(間接地,通過線程,它也引用與線程相關聯的Lua狀態)。指向線程的指針必須作為第一個參數傳遞給庫中的每個函數,lua_newstate除外,它從頭創建一個Lua狀態,并返回指向處于新狀態的主線程的指針。

當與Lua API交互時,有責任確保一致性,一定妥善控制堆棧溢出。當調用任何API函數時,必須確保堆棧有足夠的空間來容納結果。但是,當你調用一個沒有固定數量結果的Lua函數時(參見lua_call), Lua會確保堆棧有足夠的空間容納所有結果,它不確保任何額外的空間。因此,在這樣一個調用之后將任何東西壓入堆棧之前,應該使用lua_checkstack。

API中接收堆棧索引的任何函數只能使用有效索引或可接受索引。
有效索引是指存儲可修改Lua值的位置的索引。它由1和棧頂之間的堆棧索引(1≤abs(index)≤top)加上偽索引組成,偽索引表示一些C代碼可以訪問但不在棧內的位置。偽索引用于訪問注冊表(見§4.3)和C函數的上值(見§4.2)。
不需要特定的可變位置而只需要一個值的函數(例如,查詢函數)可以使用可接受的索引來調用。一個可接受的索引可以是任何有效索引,但也可以是堆棧頂部之后為堆棧分配的空間內的任何正索引,即堆棧大小之前的索引。(注意,0永遠都不是一個可接受的索引。)向上值的索引(見§4.2)大于當前C函數中向上值的實際數目也是可以接受的(但無效)。除非另有說明,否則API中的函數都使用可接受的索引。
可接受的索引可以避免在查詢堆棧時對堆棧頂部進行額外的測試。例如,一個C函數可以查詢它的第三個參數,而不需要檢查是否有第三個參數,也就是說,不需要檢查3是否是一個有效的索引。
對于可以使用可接受索引調用的函數,任何無效索引都被視為包含虛擬類型LUA_TNONE的值,該值的行為類似于nil值。

總結

以上是生活随笔為你收集整理的c++17进阶(2)-Lua扩展(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。