Search code examples
cfunction-pointers

Function pointer to different functions with different arguments in C


I have two functions with variable number and types of arguments

double my_func_one(double x, double a, double b, double c) { return x + a + b + c }
double my_func_two(double x, double p[], double c) { return x + p[0] + p[1] + c }

I want to use a pointer to a function to the functions I defined above based on a some condition getting true e.g.

if (condition_1)
   pfunc = my_func_one;
else if (condition_2)
   pfunc = my_func_two;

 // The function that will use the function I passed to it
 swap_function(a, b, pfunc);

My question is, for this scenario, Can I at all define a function pointer? If yes, how?
My understanding is that the prototype of function pointer should be the same for all those functions it CAN be pointed to.

typedef double (*pfunction)(int, int);

In my case they are not the same. Is there any other way to do this?

Language

I am developing in C and I am using gcc 4.4.3 compiler/linker


Solution

  • My question is, for this scenario, Can I at all define a function pointer?

    No. (Other than by dirty typecasting.)

    Is there any other way to do this?

    Your best bet is to create a wrapper function for one of your existing functions. For example:

    double my_func_one_wrapper(double x, double p[], double c) {
        return my_func_one(x, p[0], p[1], c);
    }
    

    That way, you have two functions with the same signature, and therefore the same function-pointer type.