gpt4 book ai didi

c - 在 C 中使用数组作为函数参数(反向可变参数)

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:48 24 4
gpt4 key购买 nike

除了一些依赖架构/编译器的程序集之外,是否有可能使用直接 C 或宏来做这样的事情,并扩展出一个可变长度数组 进入参数列表:

void myFunc (int a, int b, int c, int d);
void myOtherFunc (int a, int b);

/* try to call them */
int args[4] = { 1, 2, 3, 4 };
myFunc (SOME_MAGIC (args));

int otherArgs[2] = { 1, 2 };
myOtherFunc (SOME_MAGIC (otherArgs));

如果这是重复的,我们深表歉意;基本上我尝试过的搜索词的每个变体都有一个关于在函数之间传递数组的问题,而不是弄乱函数堆栈。

可以假设传递给函数的参数计数将始终与原型(prototype)匹配。否则,我想 argc/argv 风格的东西真的是唯一的出路吗?

另一个例子,希望有更多的上下文:

const struct func_info table[NUM_FUNCS] = {
{ foo, 1, true },
{ bar, 2, true },
// ...
}

struct func_info fi = table[function_id];
int args* = malloc (fi->argc * sizeof (int));
for (int i = 0; i < fi->argc; i++) {
args[i] = GetArgument (i);
}

fi->func (SOME_MAGIC (args));

最佳答案

您可以使用宏来扩展参数。这是一种方法:

jim@jim-HP ~
$ cc smagic.c -o smagic

jim@jim-HP ~
$ ./smagic
a=1 b=2 c=3 d=4


#define SOME_MAGIC(args) args[0], args[1], args[2], args[3]

int foo(int a, int b, int c, int d)
{
printf("a=%d b=%d c=%d d=%d\n", a,b,c,d);
return a;
}
int main(int argc, char **argv)
{
int args[]={1,2,3,4};

foo( SOME_MAGIC(args) );
return 0;
}

关于c - 在 C 中使用数组作为函数参数(反向可变参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19004509/

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