无法理解代码/函数调用

时间:2014-07-28 14:28:16

标签: c++ c function-pointers typedef function-calls

与问题相关的声明是:

typedef void (*struct_c)(
    pid_t,  
    const uint_t *,
    struct_a,       
    struct_a,       
    void *);

void func1(struct_a s, struct_a e, struct_d init, struct_c range, struct_e fini, void *arg);
static void add_range(pid_t mgid, const uint_t *propids,struct_a s, struct_a e, void *arg);

有一个函数调用如下:

func1(s, e,NULL,add_range, NULL, &ranges);

参数add_range是一个函数名,没有该名称的其他变量。

我不明白函数调用func1是如何工作的以及它的参数是什么。

如果您需要更多详情,请与我们联系。

2 个答案:

答案 0 :(得分:3)

struct_c是一个函数指针

void func1(struct_a s, struct_a e, struct_d init, struct_c range, struct_e fini, void *arg);

在其第三个参数中包含函数指针,即struct_c range,它匹配函数指针的原型

typedef void (*struct_c)(
    pid_t,  
    const uint_t *,
    struct_a,       
    struct_a,       
    void *);

add_range函数的原型。

static void add_range(pid_t mgid, const uint_t *propids,struct_a s, struct_a e, void *arg);

从微不足道的意义上说,

函数指针是函数,因为, 整数指针是整数等。

答案 1 :(得分:2)

struct_c是一个指向函数的指针类型。

func1调用add_range时,假定它具有适当的签名,则会隐式转换为所需的函数指针。

虽然这可能是一个糟糕的名字选择,我只能想象这里有遗产。