我正在查看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
的函数是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
的实现中, working 被用作函数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;
//.....
}
我错了吗?