C 嵌套调用 可变参数
时间: 2023-09-30 17:06:14 浏览: 51
嵌套调用可变参数可以通过使用递归函数来实现。下面是一个示例代码:
```c
#include <stdio.h>
#include <stdarg.h>
int sum(int count, ...)
{
int total = 0;
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
int num = va_arg(args, int);
if (num == -1) {
int nested_count = va_arg(args, int);
total += sum(nested_count, args);
} else {
total += num;
}
}
va_end(args);
return total;
}
int main()
{
int result = sum(7, 1, 2, 3, -1, 2, 3, -1, 4, 5);
printf("Sum: %d\n", result);
return 0;
}
```
在上面的示例中,我们定义了一个 `sum` 函数,它接受可变参数 `count` 和 `...`。我们使用 `va_list`、`va_start` 和 `va_arg` 宏来遍历可变参数。
在遍历过程中,如果遇到 `-1`,表示后面的参数是一个嵌套的可变参数列表。我们使用递归调用 `sum` 函数,并传递嵌套列表的参数个数和实际的参数列表。
注意,在使用 `va_arg` 获取嵌套列表的参数时,我们不需要再次调用 `va_start`,因为 `va_list` 已经指向了正确的位置。
在 `main` 函数中,我们调用 `sum` 函数来计算一系列数字的总和。输出结果为 `Sum: 20`。
希望这个示例能帮助到你!如果有任何疑问,请随时提问。