我正在大学学习线程,我想用 C 语言制作一个库,它可以做与 pthread 类似的事情,但使用进程,然后比较两者的性能。
换句话说,我想制作如下功能:
function execute_function(func_ptr, args)
其中
func_ptr
是一个通用指针,指向像 void* (*f)()
和 args 这样的函数...好吧我不知道...execute_function
内部所指向的函数的参数的数量和类型。
我想知道是否有一种方法可以“手动”在堆栈上分配参数,然后调用函数,在这种情况下,我会为总参数大小添加一个参数。
我想出的唯一解决方案是用一个将 valist 作为单个参数的函数包装 func_ptr 指向的函数,然后该函数将按照包装函数的预期“展开”valist,但这似乎与 pthread_create 相去甚远有效。
有人有想法吗?
使用宏。
#define execute_function(funcptr, ...) (funcptr)(__VA_ARGS__)
int mul(int a, int b)
{
return a * b;
}
int (*ptr)(int,int) = mul;
int main(void)
{
int result = execute_function(printf, "%d %d\n", 1,12);
size_t len = execute_function(strlen, "%d %d\n");
printf("%d\n", execute_function(ptr, 2,7));
}