最近,在学习Linux信号相关知识的时候,看到一个函数
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
这里的typedef的使用很奇怪,其实抛开typedef的自定义类型,只看函数,其实就和
int fun(int a,cha b)类似,这就很通俗易懂。要想看懂上面的函数,就必须理解typedef的用法。
首先,我们看这个定义:typedef char *p ,这里,我们首先把typedef盖上,那么就是char *p,这句话想必大家都能看懂,也就是声明了一个p指针,p指针指向char类型的数据,加上typedef之后就解释成声明了一种指向char变量指针的类型p,也就是说,p=char *,p a=char *a。然后我们来看
typedef void (*sighandler_t)(int),首先不看typedef,也就是void (*sighandler_t)(int),这就话的意思是声明了一个指向一个函数并且这个函数能接受一个整型参数并返回一个无类型指针变量sighandler_t,加上typedef之后,sighandler_t就变成了一个类型,sighandler_t p,p就是一个指向一个函数并且这个函数能接受一个整型参数并返回一个无类型指针的变量。
所以一句话就是,typedef在语句中所起的作用就是把语句原先定义变量的功能变成了定义类型的功能,仅此而已。