gpt4 book ai didi

c - 如何将函数和变量参数列表传递给 C 中的另一个函数?

转载 作者:行者123 更新时间:2023-12-02 09:25:45 24 4
gpt4 key购买 nike

我想将任意函数及其参数传递给 C 中的另一个函数。

例如像下面的代码(显然是行不通的)

#include <stdio.h>

void doit(int (*f)(...), char *fname, ...)
{
va_list argptr;
va_start(argptr, fname);
f(argptr)
va_end(argptr);
}

int func1(char *a, int b)
{
fprintf(stderr, "func1 %s %d\n", a, b);
}

int func2(char *a, int b, int c)
{
fprintf(stderr, "func2 %s %d %d\n", a, b, c);
}

int main(int argc, char **argv)
{

doit(func1, "func1", "blah", 10);

return 0;
}

最佳答案

如果你想让他们参与这样的计划,你需要 va_list 转发器到你的函数。像这样的东西:

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

void doit(int (*f)(va_list va), char *fname, ...)
{
va_list argptr;
va_start(argptr, fname);
f(argptr);
va_end(argptr);
}

int func1(const char *a, int b)
{
fprintf(stderr, "func1 %s %d\n", a, b);
return 0;
}

int func1_va(va_list va)
{
const char * a = va_arg(va, const char*);
int b = va_arg(va, int);
return func1(a,b);
}

int func2(const char *a, int b, int c)
{
fprintf(stderr, "func2 %s %d %d\n", a, b, c);
return 0;
}

int func2_va(va_list va)
{
const char *a = va_arg(va, const char*);
int b = va_arg(va, int);
int c = va_arg(va, int);
return func2(a,b,c);
}

int main(int argc, char **argv)
{

doit(func1_va, "func1", "blah", 10);
doit(func2_va, "func2", "blahblah", 100, 200);

return 0;
}

输出

func1 blah 10
func2 blahblah 100 200

关于c - 如何将函数和变量参数列表传递给 C 中的另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com