读书人

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

发布时间: 2013-04-05 10:24:33 作者: rapoo

看过《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);

读书人网 >C语言

热点推荐