如果它们都是同一类型的指针,你能将varargs解释为数组吗?

时间:2013-10-24 00:21:06

标签: c variadic-functions

如果您有int foo(a_type first, ...),其中varargs都是const char *(或其他指针类型),您可以从first(或终止{{1}确定其编号你能以某种方式将这个结构解释为一个数组(NULL)而不需要const char **一个实际的数组并将指针复制到它中吗?参数不应该在堆栈上正确对齐,就像它们在数组中的位置一样吗?这是便携的还是可以的,例如参数的顺序是不同的?

编辑:为了清楚起见,我不打算在生产代码中使用类似的东西。我很好奇。

3 个答案:

答案 0 :(得分:1)

你可能能够逃脱它。有一段时间。

问题在于,你可以在未定义的行为中侥幸逃脱许多事情,但这并不能使它们正确。

你的想法的一个问题是C不要求计算机有任何称为“堆栈”的东西或在其上放置函数参数。它们不需要在任何特定的位置或订单。

答案 1 :(得分:1)

不,它不便携。就语言标准而言,您必须使用varargs函数和宏来访问变量参数,并且无法解决这个问题。

答案 2 :(得分:0)

没有;不能保证变量参数列表将连续布局,因此您不能假设您的值将被放置,就像它们在数组中一样。您必须使用va_*宏来推进列表。