【发布时间】:2018-02-20 06:37:57
【问题描述】:
我正在尝试将 void* 元素的可变参数列表传递给 C 中的函数。
我该怎么做?
如何计算列表中的项目数?
如何循环遍历 var-args 列表并传递每个 void* 项 到另一个以 void* 项作为参数的函数?
这是我所做的,但它不起作用。
void AddValues(List* data, void* args, ...) {
int len = sizeof (args) / sizeof (*args);
for(int i=0;i<len;i++){ processItem(args[0]); }
}
void processItem(void* item){
}
【问题讨论】:
-
你不能这样计算长度。
sizeof (args) / sizeof (*args)=sizeof(void*) / sizeof(void)但 void 没有大小。采用可变参数列表的函数需要能够从其他来源确定大小: - 另一个参数(printf 使用格式字符串中 % 的数量)或特殊值(如所有 void* 指针指向事物和最后一个一个是 NULL) 所以要么第一个参数必须是大小,要么你的最后一个 void* 必须有一个特殊的标记值。 -
@gbenroscience 您的
void*参数与 var-args 的...完全无关。你不能尊重void*,如果可以的话,它不会告诉你有多少东西被指向或任何东西,因为就编译器而言,它只是一个指向void的指针。
标签: c variadic-functions