乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      和我一起寫lua - C和lua的參數(shù)傳遞與返回值

       quasiceo 2014-01-14

      分類: Python/Ruby

      lua通過一個(gè)運(yùn)行時(shí)棧來維護(hù)參數(shù)傳遞及返回,使用lua_to*等函數(shù)獲取lua傳遞到C函數(shù)的參數(shù),使用lua_push*從C函數(shù)返回值到lua腳本。此外也可以使用lua_getglobal從C函數(shù)獲取lua腳本定義的全局變量。具體參看例子(test_lua.c):

      點(diǎn)擊(此處)折疊或打開

      1. #include <lua.h>
      2. #include <lauxlib.h>

      3. #include <stdlib.h> /* For function exit() */
      4. #include <stdio.h> /* For input/output */

      5. void bail(lua_State *L, char *msg){
      6.     fprintf(stderr, "\nFATAL ERROR:\n %s: %s\n\n",
      7.         msg, lua_tostring(L, -1));
      8.     exit(1);
      9. }
      10. int lua_func_from_c(lua_State *L)
      11. {
      12.     printf("This is C\n");
      13.     int argc = lua_gettop(L);    /* number of arguments */
      14.     const char * str = lua_tostring(L,1);    /* the first argument: string */
      15.     int num = lua_tonumber(L,2); /* the second argument: number */
      16.     
      17.     printf("The first argument: %s\n", str);
      18.     printf("The second argument: %d\n", num);

      19.     lua_getglobal(L,"global_var");
      20.     const char * global_str = lua_tostring(L,-1);
      21.     printf("global_var is %s\n", global_str);

      22.     int the_second_ret = 2*num;
      23.     lua_pushstring(L, "the first return");
      24.     lua_pushnumber(L, the_second_ret);
      25.     return 2;            /* tell lua how many variables are returned */
      26. }
      27. int main(int argc, const char *argv[])
      28. {
      29.     if(argc != 2)
      30.     {
      31.         return 1;
      32.     }
      33.     lua_State *L = luaL_newstate(); /* Create new lua state variable */

      34.     /* Load Lua libraries, otherwise, the lua function in *.lua will be nil */
      35.     luaL_openlibs(L);
      36.     
      37.     /* register new lua function in C */
      38.     lua_register(L, "lua_func_from_c", lua_func_from_c);

      39.     if( luaL_loadfile(L,argv[1]) ) /* Only load the lua script file */
      40.         bail(L, "luaL_loadfile() failed");

      41.     if( lua_pcall(L,0,0,0) ) /* Run the loaded lua file */
      42.         bail(L, "lua_pcall() failed");
      43.     lua_close(L);                 /* Close the lua state variable */    

      44.     return 0;
      45. }
      lua腳本(my.lua)如下所示(在lua腳本中,如果變量不用local明確聲明為局部變量,則默認(rèn)為全局變量):

      點(diǎn)擊(此處)折疊或打開

      1. print("Hello world")
      2. global_var = "this is a global string"
      3. first, second = lua_func_from_c("the first one", 2)
      4. print("the first returned", first)
      5. print("the second returned", second)
      執(zhí)行結(jié)果:
      $ ./a.out my.lua 
      Hello world
      This is C
      The first argument: the first one
      The second argument: 2
      global_var is this is a global string
      the first returned the first return
      the second returned 4

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多