/*
@@ l_mathop allows the addition of an 'l' or 'f' to all math operations
*/
#define l_mathop(x) (x)
static int math_abs (lua_State *L) {
lua_pushnumber(L, l_mathop(fabs)(luaL_checknumber(L, 1)));
return 1;
}
如上代码,不明白为何要调用一层l_mathop,直接fabs不就可以了吗?
------解决方案--------------------
注释里说的很清楚了。如果仔细读过Programming in Lua,就会注意到Lua的Number类型是可以定制的(默认是double类型,需要使用fabs函数),如果你修改了Number的类型,那么调用math库时,你就应该调用相应的fabsl(long double)或fabsf ( fload ) 函数,也就是
#define l_mathop(x) (x ## l) // for long double
或
#define l_mathop(x) (x ## f) // for float