gpt4 book ai didi

调用带有 va_list 参数的函数需要在开始时使用 va_start() 吗?

转载 作者:行者123 更新时间:2023-12-03 23:11:29 26 4
gpt4 key购买 nike

具有以下 header 的函数:

int max(int n, va_list vals)
在函数内部调用:
int max_first(int n, ...)
需要一个 va_start(vals, n)在 body 开始时调用?我试过没有,它有效,但我不明白哪种是正确的做法。
int max(int n, va_list vals)
{
va_start(vals, n);
// etc
}

最佳答案

问题是如果

int max(int n, va_list vals)

Called inside the function:

int max_first(int n, ...)

Needs a va_start(vals, n) invocation at the body's beginning?


不,它没有,它 绝不能 ,正确的模式如下:
int max_first(int n, ...) {
va_list vals;
va_start(vals, n);
int rv = max(n, vals);
va_end(vals);
return rv;
}
然后
int max(int n, va_list vals) {
for (int i = 0; i < n; i ++) {
int val = va_arg(vals, int);
...
}

...
}
即您可以调用 va_start仅在具有 ... 的函数中并且您需要在 ... 之前传递参数,并每次调用 va_start必须始终跟随着 va_end对于相同的值,如果将其传递给函数,则必须调用 va_end之后没有在调用函数中使用它;如果你想再次处理这些参数,你必须调用 va_start再次。

关于调用带有 va_list 参数的函数需要在开始时使用 va_start() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64748394/

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