访问变量参数列表后,通常使用arg_ptr
重置va_end()
指针。我知道如果您想重新列出该列表是必需的,但是如果您不想重复使用它是否真的需要?就像“始终在default:
中包含一个switch
”这样的规则一样,这只是一种好习惯吗?
最佳答案
va_end
用于执行清理。您不想粉碎堆栈,是吗?
从man va_start
:
注意单词必须存在。
堆栈可能损坏,因为您不知道va_start()
在做什么。 va_*
宏被视为黑盒。每个平台上的每个编译器都可以在其中执行所需的操作。它可能无能为力,或者可能有很多作用。
一些ABI将寄存器中的前几个args传递,其余的传递到堆栈中。 va_arg()
可能更复杂。您可以查看给定实现如何执行varargs,这可能很有趣,但是在编写可移植代码时,应将它们视为不透明操作。
关于c++ - va_end到底是做什么用的?总是有必要打电话吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/587128/