我正在查看ss
命令代码,并且看到了一个似乎将函数作为参数传递给另一个函数的函数。但我认为这样做的方法是声明一个指向函数的指针。在代码中,他们执行以下操作:
generic_record_read(fp, tcp_show_line, f, AF_INET6).
该函数的原型是:
static int generic_record_read(FILE *fp,
int (*worker)(char*, const struct filter *, int),
const struct filter *f, int fam);
我认为函数作为参数传递给generic_record_read
is tcp_show_line
,原型是:
static int tcp_show_line(char *line, const struct filter *f, int family)
我不明白将参数声明为的tcp_show_line
方式generic_record_read
int (*worker)(char*, const struct filter *, int)
类型 ( char*, const struct filter *, int
) 与 的参数相对应,tcp_show_line
但与int (*worker)
前面的参数相对应。
似乎这是一种将函数作为参数传递的方式,因为在 的实现中generic_record_read
,工作就像是函数一样使用tcp_show_line
,但我从未见过这样的事情:
static int generic_record_read(FILE *fp,
int (*worker)(char*, const struct filter *, int),
const struct filter *f, int fam)
{
//....
if (worker(line, f, fam) < 0)
return 0;
//.....
}
我错了吗?