可以执行所有其他函数的函数

问题描述 投票:0回答:1

我正在大学学习线程,我想用 C 语言制作一个库,它可以做与 pthread 类似的事情,但使用进程,然后比较两者的性能。

换句话说,我想制作如下功能:

function execute_function(func_ptr, args)

其中

func_ptr
是一个通用指针,指向像
void* (*f)()
和 args 这样的函数...好吧我不知道...
这里的问题显然是我不知道
execute_function
内部所指向的函数的参数的数量和类型。

我想知道是否有一种方法可以“手动”在堆栈上分配参数,然后调用函数,在这种情况下,我会为总参数大小添加一个参数。

我想出的唯一解决方案是用一个将 valist 作为单个参数的函数包装 func_ptr 指向的函数,然后该函数将按照包装函数的预期“展开”valist,但这似乎与 pthread_create 相去甚远有效。

有人有想法吗?

c process stack pthreads
1个回答
0
投票

使用宏。

#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));
}
© www.soinside.com 2019 - 2024. All rights reserved.