gpt4 book ai didi

c++ - va_end 到底是做什么用的?是否总是需要调用它?

转载 作者:IT老高 更新时间:2023-10-28 13:24:21 26 4
gpt4 key购买 nike

va_end - Macro to reset arg_ptr.

在访问变量参数列表后,arg_ptr 指针通常用va_end() 重置。我知道如果您想重新迭代列表,它是必需的,但如果您不打算这样做,真的需要它吗?这只是一种好的做法,比如“在你的 switch 中总是有一个 default:”的规则吗?

最佳答案

va_end 用于进行清理。你不想破坏堆栈,是吗?

来自man va_start:

va_end()

Each invocation of va_start() must be matched by a corresponding invocation of va_end() in the same function. After the call va_end(ap) the variable ap is undefined. Multiple traversals of the list, each bracketed by va_start() and va_end() are possible. va_end() may be a macro or a function.

注意must这个词的存在。

堆栈可能会损坏,因为您不知道 va_start() 在做什么va_* 宏被视为黑盒子。每个平台上的每个编译器都可以在那里为所欲为。它可能什么都不做,也可能做很多事情。

一些 ABI 将前几个参数传递到寄存器中,其余的传递到堆栈中。 va_arg() 那里可能更复杂。您可以查看给定实现如何处理可变参数,这可能很有趣,但在编写可移植代码时,您应该将它们视为不透明的操作。

关于c++ - va_end 到底是做什么用的?是否总是需要调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/587128/

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