【问题标题】:Can't understand code/function call [duplicate]无法理解代码/函数调用[重复]
【发布时间】:2014-07-28 14:28:15
【问题描述】:

与问题相关的声明是:

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 的工作原理以及它的参数是什么。

如果您需要更多详细信息,请告诉我。

【问题讨论】:

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


    【解决方案1】:

    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);

    在微不足道的意义上,

    函数指针指向函数,例如, 整数指针指向整数等。

    【讨论】:

    • 函数指针的可怕名称。
    • @FiddlingBits 是的。将函数指针命名为 struct typedef 非常具有误导性。
    • 如果您在后续部分添加了一个使用更好命名的示例的编辑,它可能有助于抑制 可怕的名字 综合症。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我明白,但我的问题是当你像这样调用 func1 func1(s, e,NULL,add_range, NULL, &ranges); add_range 的参数是什么?对 func1 的调用不应该像func1(s, e,NULL,add_range(1,2,var_a,var_a,NULL), NULL, &ranges);
    • @Anurag,什么都没有(正如你所说的 func1)。 func1 只需要一个指向适当函数的指针。它可能会使用它计算或拥有的参数(来自某些或其他来源)调用该函数。
    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多