有谁知道如何理解下面显示的第四行代码?
typedef short Signal;
typedef struct Event Event;
typedef struct Fsm Fsm;
typedef void (*State)(Fsm *, Event const *);
答案 0 :(得分:2)
它将State
声明为typedef
的{{1}}。
void (*)(Fsm *, Event const *)
是一个函数指针,指向一个带有两个参数void (*)(Fsm *, Event const *)
和Fsm *
的函数,并返回Event const *
。
更多信息:How do function pointers in C work?和Typedef function pointer?
答案 1 :(得分:1)
让我们逐个浏览typedef:
short
创建别名。现在你可以写Signal xyz = 0;
,这相当于写short xyz = 0;
struct
关键字的情况下编写两个struct
类型的变量声明。换句话说,您现在可以编写Fsm myFsm;
而不是撰写struct Fsm myFsm;
State
,它对应于一个void
函数指针,它指向Fsm
的指针和一个指向Event
的指针。语法可能有点棘手,因为所有括号和typedef-ed的名称不在声明的末尾。您可以告诉它是函数指针的类型定义,因为类型的名称在括号中,并以星号为前缀。 typedef
的其余部分看起来非常像函数签名,因此结果很容易阅读。