如何在C中编写运行时动态函数调用,这会在运行时使用可变数量的参数?
例如,考虑long sum(int count, ...);
,它返回传递给它的(整数)参数值的总和。
$./a.out 1 2 3 4
10
$./a.out 1 2 3 4 -5
5
答案 0 :(得分:1)
你不能。唉,你只能使用给定数量的参数调用可变参数函数,但不能用数组调用。
根据体系结构的不同,您可以将函数“后面”调用为“后面”函数 - 一个va_list
的函数,只要有一个函数,例如vprintf()
“后面的printf()
”long asum(int count, long * arr)
{
long s = 0;
for (int i=0; i < count, i++) {
s += arr[i];
}
return s;
}
long vsum(int count, va_list ap)
{
long s = 0;
for (int i=0; i < count, i++) {
s += va_arg(ap, long);
}
return s;
}
long sum(int count, ...)
{
va_list ap;
va_start(ap, count);
long ret = vsum(count, ap);
va_end(ap);
return ret;
}
} - 使用数组的地址,但是高度不可移植的。最好不要这样做。
最好的方法是创建第三个函数,例如:
asum()
这个ssum()
就是你要打的那个。但这仅适用于将命令行参数转换为。
也许额外的long ssum(int count, char ** arr)
{
long s = 0;
for (int i=0; i < count, i++) {
s += atol(arr[i]); // I am not sure if this is very portable; if not, choose another way.
}
return s;
}
会有所帮助:
{{1}}
答案 1 :(得分:0)
main的签名是
int main(int argc, char *argv[])
然后,您可以访问程序时提供的参数。
解析那些。做数学。吐出答案
答案 2 :(得分:0)