QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1811|回复: 2

怎么理解signal函数的原型?

[复制链接]
发表于 2004-2-17 15:58:36 | 显示全部楼层 |阅读模式
怎么理解signal函数的原型?
signal函数的声明是
void (*signal (int signo, (* func)(int))) (int);

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

哪位老大能说明一下,谢了。
发表于 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型函数的指针。

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

使用道具 举报

 楼主| 发表于 2004-2-19 13:30:38 | 显示全部楼层
谢谢,我自己试着理解一下,呵呵。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 10:53 , Processed in 0.038234 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表