函数typedef和C

时间:2018-11-07 15:57:45

标签: c struct typedef

我正在尝试找出以下代码。 尤其是与函数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);
}

2 个答案:

答案 0 :(得分:1)

线路...

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

...将新类型foo2声明为一个带有两个int参数并返回void的函数。

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

答案 1 :(得分:0)

蒂姆·兰德尔(Tim Randall)的解释很好,但让我补充一下。

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

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

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