【发布时间】:2013-03-16 01:00:22
【问题描述】:
我正在查看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)
我不明白将generic_record_read中的参数tcp_show_line声明为int (*worker)(char*, const struct filter *, int)的方式
类型(char*, const struct filter *, int)对应tcp_show_line的参数,但前面有int (*worker)。
似乎这是一种将函数作为参数传递的方式,因为在generic_record_read 的实现中,worked 被用作函数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;
//.....
}
我错了吗?
【问题讨论】:
-
它只是一个作为参数传递的函数指针。
worker是他们选择的名称。
标签: c function function-pointers worker