有没有人知道如何理解下面显示的代码的第四行?如何理解以下有关typedef的代码C
typedef short Signal;
typedef struct Event Event;
typedef struct Fsm Fsm;
typedef void (*State)(Fsm *, Event const *);
有没有人知道如何理解下面显示的代码的第四行?如何理解以下有关typedef的代码C
typedef short Signal;
typedef struct Event Event;
typedef struct Fsm Fsm;
typedef void (*State)(Fsm *, Event const *);
它声明State
为typedef
为void (*)(Fsm *, Event const *)
。
void (*)(Fsm *, Event const *)
是一个函数指针,指向一个函数,它带有两个参数:Fsm *
和Event const *
,并返回void
。
的更多信息:How do function pointers in C work?和Typedef function pointer?
让我们通过的typedef逐一:
short
的别名。现在您可以编写Signal xyz = 0;
并且它将等同于编写short xyz = 0;
struct
类型的变量的声明,而不使用struct
关键字。换句话说,你现在可以写Fsm myFsm;
,而不是写struct Fsm myFsm;
State
对应于void
函数指针采用指针来Fsm
和指针Event
。语法可能有点棘手,因为所有的括号和名称都是typedef-ed不在声明结尾。你可以告诉它是一个函数指针的类型定义,因为这个类型的名字在括号中,并且前面加了一个星号。 typedef
的其余部分看起来非常像函数签名,所以结果很容易阅读。
看看这篇文章http://stackoverflow.com/questions/4295432/typedef-function-pointer – Mido 2015-03-25 01:18:56