在事先不知道它由多少个可变参数组成的情况下遍历 va_list 的所有参数

Go through all the arguments of a va_list without knowing in advance how many variable arguments it is composed of

我的问题是:有没有一种方法可以遍历 va_list 的所有参数,而无需先验地知道它由多少个可变参数组成?在网络上,我找到了一些示例,其中椭圆参数的数量作为第一个参数传递,因此,使用 for 循环,可以轻松导航元素。我希望我的功能是隐式的。

Is there a way to go through all the arguments of a va_list without knowing a priori how many variable arguments it is composed of?

不,没有。必须知道参数的数量(和类型),使用标记值或传递变量或使参数的数量取决于其他参数(我的意思是,例如 printf)。关于参数计数的信息不会存储在任何地方 - 如果您的算法需要该信息,您必须自己传递它。

您可以编写宏来重载参数数量并将参数计数作为参数传递。或者对于哨兵方法,您还可以编写一个将传递 NULL 的宏,如果您使用的是 gcc,则有一个 gcc attribute(sentinel) function attribute 会产生警告,因为缺少哨兵 NULL