+ -
当前位置:首页 → 问答吧 → Unix环境高级编程10.3的一个例子不太懂

Unix环境高级编程10.3的一个例子不太懂

时间:2011-11-22

来源:互联网

signal函数的为

C/C++ code
void (*signal(int signo, void (*func)(int))(int);


这里返回一个函数指针,该指针所指向的函数是一个int 作为参数,无返回值的函数。

后面又有typedef void Sigfunc(int);这个如何理解呢?

又有C/C++ code
Sigfunc *signal(int, Sigfunc *);

作者: oldmtn   发布时间: 2011-11-22

typedef void (*Sigfunc)(int);
Sigfunc是一个函数指针类型
typedef void Sigfunc(int);
Sigfunc是一个函数类型,少了*而已
C/C++ code

typedef void Sigfunc(int);
Sigfunc *signal(int, Sigfunc *);
//和下面是等价的
typedef void (*Sigfunc)(int);
Sigfunc signal(int, Sigfunc *);


作者: thefirstz   发布时间: 2011-11-22

void (*signal(int signo, void (*func)(int))(int);
//和下面是等价的
typedef void Sigfunc(int);
Sigfunc *signal(int, Sigfunc *);

最后都返回了一个函数指针void(*)(int)

作者: jcback   发布时间: 2011-11-22

引用 1 楼 thefirstz 的回复:

typedef void (*Sigfunc)(int);
Sigfunc是一个函数指针类型
typedef void Sigfunc(int);
Sigfunc是一个函数类型,少了*而已
C/C++ code

typedef void Sigfunc(int);
Sigfunc *signal(int, Sigfunc *);
//和下面是等价的
typedef void (*Si……

是的吗?

是不是应该是等同于
typedef void (*Sigfunc)(int);
Sigfunc * signal(int, Sigfunc);

作者: oldmtn   发布时间: 2011-11-22

OK.我理解了。
对于typedef void Sigfunc(int);
这里Sigfunc是一个函数类型
那么Sigfunc *signal(int, Sigfunc *);

可以看为Sigfunc* signal(int, Sigfunc*);
这里Sigfunc*为返回值类型,也就是void (*)(int);
signal(int, Sigfunc*);可以看为signal(int, void (*)(int));这是一个函数,和上面的返回值嵌入一起就是

void (* signal(int, void (*func)(int))(int);
这里的第二个参数为函数指针,而Sigfunc*就是一个函数指针。满足要求

作者: oldmtn   发布时间: 2011-11-22