首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

看过《C缺陷与圈套》的求教一下

2013-04-05 
看过《C缺陷与陷阱》的求教一下在书中,有一个这样的例子:所以我的理解应该这样写啊:typedef void (*HANDLER)

看过《C缺陷与陷阱》的求教一下
在书中,有一个这样的例子:


所以我的理解应该这样写啊:

typedef void (*HANDLER)(int);
void signal(int,HANDLER);

他不是说signal的返回值为void吗?这是问题1。
我的问题2:

void (*signal(int,void(*)(int)))(int);

这样的函数声明怎么去调用呢?能举个调用例子吗? c
[解决办法]
SYNOPSIS
       #include <signal.h>
       typedef void (*sighandler_t)(int);
       sighandler_t signal(int signum, sighandler_t handler);

NOTES
       The  use of sighandler_t is a GNU extension, exposed if _GNU_SOURCE is defined; glibc also
       defines (the BSD-derived) sig_t if _BSD_SOURCE is defined.  Without use of  such  a  type,
       the declaration of signal() is the somewhat harder to read:
           void ( *signal(int signum, void (*handler)(int)) ) (int);

[解决办法]
就第一个问题
对于
void (*signal(int,void(*)(int)))(int); // *1
如果按LZ的理解
typedef void (*HANDLER)(int);
void signal(int,HANDLER);
那么signal函数有两个参数,返回void
明显跟*1不一样,*1的signal,有两个参数,但是返回函数指针,该指针指向的函数应该能接收int参数,并返回void(这不就是HANDLE表示的类型么),即
HANDLER signal(int,HANDLER);

热点排行