函数 typedef 和从 C 中的结构调用函数

function typedef and call to function from struct in C

我正在尝试找出以下代码。 特别是与函数 typedef 相关的部分。

#include <stdio.h>
void foo1(int var1, int var2); // foo1 decleration
typedef void (foo2)(int var1, int var2); // what is this exactly?

typedef struct somestruct{
    foo2* somefunc;
}SOMESTRUCT;

int main()
{
    SOMESTRUCT struct1;
    struct1.somefunc = &foo1; 
    struct1.somefunc(1,5);
    return 0;
}

void foo1(int var1, int var2){
    printf("this is function inside struct var1 = %d var2 = %d",var1, var2);
}

线...

typedef void (foo2)(int var1, int var2); // what is this exactly?

...声明一个新类型,foo2,作为一个带有两个 int 参数和 returns void 的函数。

后面的代码中,函数foo1的地址(与函数签名匹配)存储在struct1somefunc成员中,然后调用它。参数 1 和 5.

Tim Randall 的解释很好,但让我补充一下。

typedef 关键字定义了一种新的数据类型,可以用来代替其原始定义。如果您不想使用 typedef,该结构可以定义为:

typedef struct somestruct{
    void(*somefunc)(int a,int b);
}SOMESTRUCT;

在这种情况下,我们不会节省太多,但如果我们有多个函数指针,使用 typedef 会节省很多,并使程序更易于阅读。