#include #include #include static double test_function(int a, double b, int c, ...) { #if 1 va_list args; va_start(args, c); int d = va_arg(args, int); double e = va_arg(args, double); int f = va_arg(args, int); printf("a=%d, b=%lf, c=%d, d=%d, e=%lf, f=%d\n", a, b, c, d, e, f); return (a + b + c + d + e + f) + 0.5; #else printf("a=%d, b=%lf, c=%d\n", a, b, c); return 32; #endif } int main(int argc, const char **argv) { fx_value_type arg_types[] = { FX_VALUE_TYPE_INT, FX_VALUE_TYPE_DOUBLE, FX_VALUE_TYPE_INT, }; fx_function *func = fx_function_create( "test_function", FX_FUNCTION_F_VARARG, (fx_function_impl)test_function, arg_types, 3, FX_VALUE_TYPE_DOUBLE); fx_value args[] = { FX_VALUE_INT(1), FX_VALUE_DOUBLE(2.5), FX_VALUE_INT(3), FX_VALUE_INT(4), FX_VALUE_DOUBLE(5.5), FX_VALUE_INT(6), }; fx_value result = FX_VALUE_EMPTY; int r = fx_function_invoke(func, args, 6, &result); printf("%lf\n", result.v_double); return 0; }