我读了一些关于C/C++中可变参数函数的内容,并在一个提到重用va_list的 线程 中发现了,为了在GCC中重用它,你需要使用 va_copy 函数并传入其副本。同时,在同一个线程中,他们建议使用以下方式定义:
#define va_copy(d,s) ((d) = (s))
这意味着简单地将 va_list s 的值分配给 va_list d。
使用 va_list ap1 = va_list ap
不更易读吗?创建另一个名为 va_copy 的函数的目的是什么?
((d) = (s))
的答案,并没有建议在GCC或通常情况下这样做。这是针对MSVC的一个具体建议。C标准定义了va_copy
和相关功能必须满足的某些属性,而C实现以不同的方式实现这些属性。在MSVC支持可变参数列表的方法中,((d) = (s))
可能有效,在其他方法中则可能无效。 - Eric Postpischil