访问变量参数列表后,通常使用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/

10-11 19:16