如果我的理解是正确的va_end
被调用进行清理,并且在同一个上下文中,va_end
的手册页说明了
va_end用来()
每次调用va_start()都必须与相应的匹配 在同一个函数中调用va_end()。通话后va_end(ap) 变量ap未定义。列表的多次遍历,每次遍历 由va_start()和va_end()括起来是可能的。 va_end()可能是一个 宏或功能。
因此,如果调用va_end
,则需要调用va_start
,但反向关系是否成立,即va_end
是否始终以va_start
开头?
答案 0 :(得分:5)
来自C99 7.15.1.3/2“va_end
宏”:
如果没有相应的va_start或va_copy宏调用,或者在返回之前未调用va_end宏,则行为未定义。
答案 1 :(得分:2)
不,另一种选择是va_copy()
。它们都需要与va_end()
配对。
在其他情况下,没有必要这样做。