windofau 发表于 2004-2-17 15:58:36

怎么理解signal函数的原型?

怎么理解signal函数的原型?
signal函数的声明是
void (*signal (int signo, (* func)(int))) (int);

对于 *func我能明白是函数指针,但最前面的void 和 最后的 int怎么解释?这个函数的返回应该是什么型的?
另外,书上说为了简化写法,做如下定义:
typedef void Sigfunc(int);
则signal函数就可以写成:
Sigfunc *signal(int, Sigfunc *);
这有应该怎么来解释?

哪位老大能说明一下,谢了。

kakuyou 发表于 2004-2-18 23:55:37

前面那个太兜圈子了,讲解后面的。
typedef void Sigfunc(int) 定义了一个函数类型。
任何有一个整形参数,返回void的函数都属于这个类型。
例如以下的函数都属于这个类型。
void eat (int footId);
void look (int peopleId);
void steal (int moneyId);
Sigfunc*声明这是上面这个类型的指针。
你可以写
Sigfunc* p ;
p=eat;
p=look;
p=steal;

所以由Sigfunc *signal(int, Sigfunc *)看出 signal是一个函数名。
它的参数是一个int 和Sigfunc型函数的指针。
它返回一个Sigfunc型函数的指针。

这样你再自己慢慢体会前面的,最好自己写个程序验证。

windofau 发表于 2004-2-19 13:30:38

谢谢,我自己试着理解一下,呵呵。
页: [1]
查看完整版本: 怎么理解signal函数的原型?