如果你有int foo(a_type first, ...)
varargs 都是const char *
(或其他一些指针类型)并且你可以从 first
(或通过终止NULL
指针)确定它们的数量,你能否以某种方式将此结构解释为数组(const char **
)而不需要malloc
实际数组并将指针复制到其中?参数不应该在堆栈上正确对齐,就像它们在数组中的位置一样吗?那是可移植的还是可以例如参数的顺序不同?
编辑:为了清楚起见,我不打算在生产代码中使用类似的东西。我只是好奇。
如果你有int foo(a_type first, ...)
varargs 都是const char *
(或其他一些指针类型)并且你可以从 first
(或通过终止NULL
指针)确定它们的数量,你能否以某种方式将此结构解释为数组(const char **
)而不需要malloc
实际数组并将指针复制到其中?参数不应该在堆栈上正确对齐,就像它们在数组中的位置一样吗?那是可移植的还是可以例如参数的顺序不同?
编辑:为了清楚起见,我不打算在生产代码中使用类似的东西。我只是好奇。
你也许可以摆脱它。一阵子。
问题在于,在 C 语言中,您可以在未定义行为中摆脱很多东西,但这并不能使它们正确。
您的想法的一个问题是,C 不需要计算机具有任何称为“堆栈”的东西或在其上放置函数参数。它们不需要位于任何特定位置或顺序。
不,它不会是便携式的。就语言标准而言,您必须使用 varargs 函数和宏来访问变量参数,并且没有办法解决这个问题。
不; 不能保证变量参数列表将连续布置,因此您不能假设您的值将像在数组中一样布置。您必须使用va_*
宏在列表中前进。