Поскольку вы используете C, а work
является типом void (*)(long)
, но вы хотите сделать его void (*)(void*)
, просто повторно приведите тип work
(это можно сделать проще используя typedef)
//declare somewhere at a global level
typedef void (*task_create_func)(void*);
//at the point where you want to call task_create
task_create((task_create_func)work, PARAM1, PARM2);
В качестве альтернативы, если вы не хотите иметь дело с typedefs, вы можете просто выполнить приведение с использованием желаемого типа указателя в точке вызова следующим образом:
task_create((void (*)(void*))work, PARAM1, PARAM2);