我正在尝试找出以下代码。 尤其是与函数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);
}
答案 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
的使用会节省很多,并使程序更易于阅读。