【发布时间】:2010-04-12 12:51:05
【问题描述】:
我有以下功能:
void doStuff(int unusedParameter, ...)
{
va_list params;
va_start(params, unusedParameter);
/* ... */
va_end(params);
}
作为重构的一部分,我想删除未使用的参数,而不更改函数的实现。据我所知,当您没有最后一个非可变参数可供参考时,不可能使用va_start。有没有办法解决这个问题?
背景:它实际上是一个 C++ 程序,所以我可以按照 here 的建议使用一些运算符重载魔法,但我希望此时不必更改接口。
现有函数通过要求变量参数列表以空值结尾并扫描 NULL 来完成其工作,因此它不需要前导参数来告诉它有多少个参数。
回应 cmets:我没有有删除未使用的参数,但如果有一个干净的方法,我会这样做。我希望有一些我错过的简单的东西。
【问题讨论】:
-
@Axarydax:他特意问是否有其他解决方案。
-
真的要删除吗?您可以将其视为第一个可变参数。
-
@Nick D:你应该让你的评论成为答案,你至少会得到我的一票。
-
"扫描 NULL" - 你说你不想改变界面?例如,传递一个指向数组的指针 ;-)
标签: c variadic-functions