, SO; , .
void * . ,
fp :
#include <stdio.h>
typedef int (*dummy_function_type)(int);
typedef dummy_function_type (*decker_function_t)(int);
dummy_function_type some_task(int someparam)
{
fprintf(stdout, "%s\n", __FUNCTION__);
return 0;
}
dummy_function_type decker_queue_root(int redundantparam)
{
fprintf(stdout, "%s\n", __FUNCTION__);
return (dummy_function_type)some_task;
}
void process_decker_queue(decker_function_t jobs)
{
decker_function_t next_decker(decker_function_t cur_decker, int param)
{
if(!cur_decker)return 0;
return (decker_function_t)(cur_decker(param));
}
decker_function_t cursor;
cursor = jobs;
while(cursor)
{
cursor = next_decker(cursor, 0);
}
}
int main()
{
decker_function_t prime = &decker_queue_root;
process_decker_queue(prime);
fprintf(stdout, "this compiles..\n");
return 0;
}
:
$ ./test_frecurse
decker_queue_root
some_task
this compiles..