lua(簡單的傳參)


#include <iostream>
#include <string.h>

extern "C"
{
/*頭文件lua.h定義了Lua提供的基礎函數,包括創建Lua環境、調用Lua函數、讀寫Lua環境中全局變量,以及注冊供Lua調用的新函數等等*/
#include "lua-5.2.2/src/lua.h"
/*頭文件lauxlib.h定義了輔助庫提供的輔助函數,它的所有定義都以LuaL_開頭。輔助庫是一個使用lua.h中API編寫出的一個較高的抽象層。
Lua的所有標准庫編寫都用到了輔助庫;輔助庫主要用來解決實際的問題。輔助庫並沒有直接訪問Lua的內部,它都是用官方的基礎API來完成所有工作的*/
#include "lua-5.2.2/src/lauxlib.h"
/*
頭文件lualib.h定義了打開標准庫的函數。Lua庫中沒有定義任何全局變量。它將所有的狀態都保存在動態結構lua_State中,
所有的C API都要求傳入一個指向該結構的指針。luaL_newstate函數用於創建一個新環境或狀態。當luaL_newstate創建一個新的環境時,新的環境中並沒有包含預定義的函數(eg.print)。為了使Lua保持靈活,
小巧,所有的標准庫都被組織到了不同的包中。當我們需要使用哪個標准庫時,就可以調用lualib.h中定義的函數來打開對應的標准庫;而輔助函數luaL_openlibs則可以打開所有的標准庫
*/
#include "lua-5.2.2/src/lualib.h"
}
int main()
{
    char buff[256] = {0};
    int error;
     // 打開Lua,lua_State有的說是虛擬機有的說是狀態機,感覺是其與lua交互的東西,里面有交互棧的相關信息
    // 所有C api函數的第一個參數都是這個lua_state
    lua_State *L = luaL_newstate();
    luaL_openlibs(L); // 打開標准庫,lua所有的庫都是以閉包
    while (fgets(buff, sizeof(buff), stdin) != NULL)
    {
        /*
        luaL_loadbuffer編譯輸入的lua代碼,沒有錯誤返回0並將編譯之后的chunk壓入棧
        */
        /*
        將chunk從棧中彈出並在保護模式下運行
        */
        error = luaL_loadbuffer(L, buff, strlen(buff), "line")
            || lua_pcall(L, 0, 0, 0);
        if (error)
        {
            /*
            如果有錯誤上面這兩個函數都將錯誤信息壓入棧
            lua_tostring從棧中獲取
            */
            fprintf(stderr, "%s", lua_tostring(L, -1));
            /*
            從棧中刪除錯誤信息
            */
            lua_pop(L, 1); // 從棧中彈出錯誤消息
        }
    }

    lua_close(L);
    getchar();
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM