如果您有int foo(a_type first, ...)
,其中varargs都是const char *
(或其他指针类型),您可以从first
(或终止{{1}确定其编号你能以某种方式将这个结构解释为一个数组(NULL
)而不需要const char **
一个实际的数组并将指针复制到它中吗?参数不应该在堆栈上正确对齐,就像它们在数组中的位置一样吗?这是便携的还是可以的,例如参数的顺序是不同的?
编辑:为了清楚起见,我不打算在生产代码中使用类似的东西。我很好奇。
答案 0 :(得分:1)
你可能能够逃脱它。有一段时间。
问题在于,你可以在未定义的行为中侥幸逃脱许多事情,但这并不能使它们正确。
你的想法的一个问题是C不要求计算机有任何称为“堆栈”的东西或在其上放置函数参数。它们不需要在任何特定的位置或订单。
答案 1 :(得分:1)
不,它不便携。就语言标准而言,您必须使用varargs函数和宏来访问变量参数,并且无法解决这个问题。
答案 2 :(得分:0)
没有;不能保证变量参数列表将连续布局,因此您不能假设您的值将被放置,就像它们在数组中一样。您必须使用va_*
宏来推进列表。