3

如果我的理解是正确va_end的,则需要清理并在相同的上下文中,手册页va_end

va_end()

va_start() 的每次调用都必须与同一函数中相应的 va_end() 调用相匹配。在调用 va_end(ap) 之后,变量 ap 未定义。可以对列表进行多次遍历,每次都由 va_start() 和 va_end() 括起来。va_end() 可以是宏或函数。

所以很明显va_end需要调用 ifva_start被调用,但是反向关系是否成立,即应该va_end总是在va_start?

4

2 回答 2

5

从 C99 7.15.1.3/2“va_end宏”开始:

如果没有对 va_start 或 va_copy 宏的相应调用,或者如果在返回之前没有调用 va_end 宏,则行为未定义。

于 2013-06-28T08:22:13.890 回答
2

不,另一种选择是va_copy(). 他们都需要与va_end().

在其他情况下,这样做没有意义。

于 2013-06-28T07:02:26.930 回答