如何理解C中关于typedef的以下代码

时间:2015-03-25 01:13:36

标签: c typedef

有谁知道如何理解下面显示的第四行代码?

typedef short Signal;
typedef struct Event Event;
typedef struct Fsm Fsm;
typedef void (*State)(Fsm *, Event const *);

2 个答案:

答案 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的其余部分看起来非常像函数签名,因此结果很容易阅读。