gpt4 book ai didi

c - 传递 va_list 还是指向 va_list 的指针?

转载 作者:行者123 更新时间:2023-12-02 07:46:22 31 4
gpt4 key购买 nike

假设我有一个函数,它接受可变参数 (...) 或从另一个此类函数传递的 va_list 。主要逻辑在这个函数本身(我们称之为 f1),但我想让它将 va_list 传递给另一个函数(我们称之为 f2) 它将确定下一个参数类型,使用 va_arg 获取它,并正确转换和存储它以供调用者使用。

将 va_list 传递给 f2 是否足够,或者是否有必要传递一个指向 va_list 的指针。除非 va_list 需要是数组类型或者将其位置数据存储在 va_list 对象指向的位置(而不是对象本身),否则我看不出如何按值传递它允许调用函数 (f1)“查看”va_arg 对被调用函数所做的更改。

有人能解释一下吗?我感兴趣的是标准的要求,而不是某些特定实现允许的内容。

最佳答案

看起来您需要传递一个指向 va_list 的指针。有关详细信息,请参阅C99 standard document第 7.15 节。特别是,第 3 点指出:

The object ap may be passed as an argument to another function; if that function invokes the va_arg macro with parameter ap, the value of ap in the calling function is indeterminate and shall be passed to the va_end macro prior to any further reference to ap

[我的斜体]

编辑:刚刚注意到标准中的脚注:

215) It is permitted to create a pointer to a va_list and pass that pointer to another function, in which case the original function may make further use of the original list after the other function returns

因此,您可以将指针传递给 va_list 并在被调用函数中执行 va_arg(*va_list_pointer)

关于c - 传递 va_list 还是指向 va_list 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369588/

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