gpt4 book ai didi

c - C中的worker是什么?

转载 作者:行者123 更新时间:2023-11-30 14:20:28 25 4
gpt4 key购买 nike

我正在查看 ss 命令代码,我看到一个函数似乎将一个函数作为参数传递给另一个函数。但我认为这样做的方法是声明一个指向函数的指针。相反,在代码中,他们执行以下操作:

generic_record_read(fp, tcp_show_line, f, AF_INET6).

该函数的原型(prototype)是:

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,其原型(prototype)是:

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 是一个函数指针,在调用时,它采用以下参数:char*、const struct filter *、int。如果您以前没有见过这些,那么您显然没有使用过 qsortbsearch ,它们是用于排序和搜索的标准 C 函数。这种抽象在 C 中非常有用。

关于c - C中的worker是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15444385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com