程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言調用Lua函數

C語言調用Lua函數

編輯:關於C語言

C語言調用Lua函數


記得上學時,初中英文課本中,上網叫做surfing the internet,中文叫網上沖浪。那個時期,人們經常稱互聯網為賽博空間。如今工作了,大量的零碎時間用於上微博,知乎,QQ,這些碎片化的閱讀讓人讀起來輕松,也能獲取些粗淺的信息。然而它們是消耗時間的黑洞,時間就這樣一分一秒地飛逝,年末的時候,知乎會告訴你回答了多少問題,閱讀了相當於一部《紅樓夢》那麼多的文字。只是當你靜下來一想,這些淺閱讀並沒給你帶來有深度,系統的知識。在你的時間線上,兩條相鄰信息往往是八竿子也打不著的。而且你還時不時去看看關注者有沒有更新,期待讓你眼前一亮的信息。結果往往是趁興而去,敗興而回。屏幕上的信息永無止境地滾動著,是如此的熱鬧,仿佛每個人都在狂歡,而我的內心卻如此的空虛與孤獨。

在lua API中,調用一個函數的步驟很簡單: 1.壓入你要調用的函數,使用lua_getglobal。 2.壓入調用參數。 3.使用lua_pcall 4.從棧中彈出結果。
舉例說明,假設你有這麼一個lua函數: function f (x, y)
return (x^2 * math.sin(y))/(1 - x)
end
那麼,我們就可以定義個c函數來封裝這個調用: /* call a function 'f' defined in Lua */
double f (double x, double y) {
double z; lua_getglobal(L, "f"); lua_pushnumber(L, x); lua_pushnumber(L, y); /* do the call (2 arguments, 1 result) */ if (lua_pcall(L, 2, 1, 0) != 0) error(L, "error running function 'f': %s", lua_tostring(L, -1));
if (!lua_isnumber(L, -1)) error(L, "function 'f' must return a number"); z = lua_tonumber(L, -1); lua_pop(L, 1); return z;
}
lua_pcall在壓入結果的之前,會將函數,和參數彈出,如果返回多個結果,第一個最先壓入。如果lua_pcall運行出錯,那麼會返回個非0值。 (完)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved