コマンドコードを見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
の実装では、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;
//.....
}
私が間違っている?