我们可以在不调用va_start的情况下调用va_end吗?

时间:2013-06-28 07:00:41

标签: c++ c

如果我的理解是正确的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开头?

2 个答案:

答案 0 :(得分:5)

来自C99 7.15.1.3/2“va_end宏”:

  

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

答案 1 :(得分:2)

不,另一种选择是va_copy()。它们都需要与va_end()配对。

在其他情况下,没有必要这样做。