Home > Mobile >  write a variable that takes a list of functions
write a variable that takes a list of functions

Time:09-21

I want to write a variable that takes a list of functions, is that even possible? to have a list of functions in C?

example:

// this type is for one function
void (*f)(void) = func1;

// but this is what I need
/*TYPE*/ vf = { func1, func2, NULL };

I dont want to build new struct that hold the function and the next function, I want to like i mentioned above, is that possible without creating a dedicated struct?

note: I am not bound to a specific C standard

CodePudding user response:

This record

void (*f)(void) = func1;

declares one pointer to function.

This record

void ( * vf[] )( void ) = { func1, func2, NULL };

or

void ( * vf[3] )( void ) = { func1, func2, NULL };

declares an array of pointers to functions.

You could simplify the declaration using a typedef either for the function type or for a pointer to the function type as for example

typedef void Func( void );
Func * vf[3] = { func1, func2, NULL };

or

typedef void ( *FuncPtr )( void );
FuncPtr vf[3] = { func1, func2, NULL };

CodePudding user response:

I recommend you start with a type-alias, like for example this:

typedef void (function_type)(void);

Then you can use this to declare variables like any other type:

function_type *f = &func1;

And as an almost normal standard type, this can of course be used to define arrays:

function_type *vf[] = { &func1, &func2, NULL };

CodePudding user response:

This is auxiliary answer to other ones.

If our compiler supports typeof extension (a feature in upcoming C23) then you can do:

typeof(void(void))* vf[] = { func1, func2, NULL };
  • Related