我正在查看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_readis tcp_show_line,原型是:
static int tcp_show_line(char *line, const struct filter *f, int family)
我不明白将参数声明为的tcp_show_line方式generic_record_readint (*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;
//.....
}
我错了吗?