【发布时间】:2016-05-09 10:43:23
【问题描述】:
在这样的函数中:
typedef double(*dfun)(double);
void tab(double x, int n, ...)
{
va_list args;
va_start(args, n);
printf("%5.2lf \t", x);
for (int i=0; i<n; i++)
{
dfun tmp = va_arg(args, dfun);
printf(" %5.2lf \t", tmp(x));
}
va_end(args);
}
如果我这样拉参数是不是错了:
double(*tmp)(double) = va_arg(args, double(*)(double));
我看到了this 文章,如果它不起作用,建议使用不同的方法:
问:我无法让 va_arg 引入指向函数类型的参数。
答: 尝试对函数指针类型使用 typedef。 va_arg 宏通常玩的类型重写游戏被过于复杂的类型所阻碍,例如指向函数的类型。
就我而言,它适用于两个版本(GCC 5.2.1),这就是为什么我想知道一种方法比另一种更好吗?当我不首先键入指向函数的指针时是否存在一些潜在的错误?
【问题讨论】:
-
@KerrekSB 这可能是相关的,请参阅我的回答。
-
@2501:谢谢,很好的发现!
标签: c function-pointers variadic-functions