当前位置: 技术问答>linux和unix
void(*signal(int signo,void(*func)(int)))(int)又有问题了
来源: 互联网 发布时间:2016-08-03
本文导语: 昨天那个帖子结贴结太快了,又有问题了,只能重新发帖了,呵呵。 还请教各位大侠,现在看到一个实例,用到了这个信号处理函数。 列出其中一点代码: void myfunc(int signo) {... //代码 } int main...
昨天那个帖子结贴结太快了,又有问题了,只能重新发帖了,呵呵。
还请教各位大侠,现在看到一个实例,用到了这个信号处理函数。
列出其中一点代码:
void myfunc(int signo)
{... //代码
}
int main()
{signal(SIGINT,myfunc);
signal(SIGQUIT,myfunc);
}
按照昨天那个帖子的理解,这个signal函数返回值是VOID,即没有,带两个形参,一个int,一个是指向函数的指针。那么最右边的(int)是什么呀,没有用吗?
void(*signal(...))(int)这个怎么解释呀?
还请教各位大侠,现在看到一个实例,用到了这个信号处理函数。
列出其中一点代码:
void myfunc(int signo)
{... //代码
}
int main()
{signal(SIGINT,myfunc);
signal(SIGQUIT,myfunc);
}
按照昨天那个帖子的理解,这个signal函数返回值是VOID,即没有,带两个形参,一个int,一个是指向函数的指针。那么最右边的(int)是什么呀,没有用吗?
void(*signal(...))(int)这个怎么解释呀?
|
typedef void (*pF)(int);
// 函数声明
void(*signal(int signo,void(*func)(int)))(int);
// 函数定义
pF signal(int sgno, pF func)
{
}
|
原来楼主已经自己弄明白了。
4楼那段代码可以通过编译,说明函数定义和声明是一致的,也就是说用typedef改写的那一行和原来的复杂写法等价。
|
signal函数的返回值不是void,而是返回一个函数指针,int是返回的这个函数的参数。
改成这样就清楚一点:
typedef void (*F)(int);
F signal(...);