Error Invalid use of void expression

Arun Gupta picture Arun Gupta · Mar 29, 2014 · Viewed 65.9k times · Source

I have a function int rt_task_start (RT_TASK *task, void(*task_func)(void *arg), void *arg) where in second argument i am passing a function with argument.

  1. When i only pass a function name at that time there is no problem.(as expected it's working). rt_task_start(&demo_task1, demo, 1);
  2. But when i pass rt_task_start(&demo_task1, demo(&val), 1); it's giving me error error: invalid use of void expression. Variable val is defined before. int val = 0;
  3. When i call with this rt_task_start(&demo_task1, demo(val), 1); this is showing error Warning passing argument 1 of 'demo' makes pointer from integer without a cast then error: invalid use of void expression.
  4. int *val; *val = 0; rt_task_start(&demo_task1, demo(&val), 1); this is also giving me error.

I can't understand what should i pass, as a void pointer. It's giving me error. Any Idea Please!

Answer

ajay picture ajay · Mar 29, 2014
void (*task_func)(void *arg);

The above statement defines task_func to be a pointer to a function which takes a pointer of type void * and returns no value.

Therefore, when you call your function rt_task_start, you should pass a pointer to a function as the second argument. Also, you should pass a pointer of type void * as the third argument, not an integer. A function name evaluates to a pointer to the function, so you can simply pass the function name as the argument value, or you can use the address-of operator & before the function name.

int arg = 4;

// both calls are equivalent

rt_task_start(&demo_task1, demo, &arg);
rt_task_start(&demo_task1, &demo, &arg);