请教 signal 函数原型的语法细节

LoveCreatesBeauty 2004-10-07 03:50:50
void (*signal(int sig, void (*func)(int)))(int);

明白函数指针。但是signal的原型看了好几天了也没有明白。请用 C 语言的语法解释该函数原型的各部分。
...全文
1133 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
北极猩猩 2004-10-08
  • 打赏
  • 举报
回复
楼主,该结贴了
LoveCreatesBeauty 2004-10-08
  • 打赏
  • 举报
回复
谢谢啊,不过还是觉得语法的细节不够清楚。
有关函数指针的东西真的可以很复杂。真要像k&r说得那样,见到它,知道是这么回事就好了。
sharkhuang 2004-10-08
  • 打赏
  • 举报
回复
struct signal_struct {
atomic_t count;

/* current thread group signal load-balancing target: */
task_t *curr_target;

/* shared signal handling: */
struct sigpending shared_pending;

/* thread group exit support */
int group_exit;
int group_exit_code;
struct task_struct *group_exit_task;

/* thread group stop support, overloads group_exit_code too */
int group_stop_count;
};
BluntBlade 2004-10-07
  • 打赏
  • 举报
回复
上面的都说清楚了呐
LoveCreatesBeauty 2004-10-07
  • 打赏
  • 举报
回复
Polarislee说的我听的很清楚,谢谢啊。

我还要仔细思考,我还没有真正领会,如果真要我自己写一个这样的函数,我不能就能写好的。

“返回值是一个函数指针”--学C/C++也有一些时间了,第一次碰到它。我知道的东西真是太少了。
北极猩猩 2004-10-07
  • 打赏
  • 举报
回复
signal是这么一个东西:
signal是一个函数,有两个参数,第一个是int,第二个是指向参数为int返回值为void的函数的指针,signal的返回值是一个函数指针,一样指向一个参数为int返回值为void的函数
LoveCreatesBeauty 2004-10-07
  • 打赏
  • 举报
回复
>signal is a function that returns a pointer to another function. This second function takes a single int argument and returns void.

敢情signal函数它说明的不是它自己?而是说明另外一个函数的返回类型和参数,signal返回的指针指向这个函数.....乖乖.....这怎么可以.....
LoveCreatesBeauty 2004-10-07
  • 打赏
  • 举报
回复
ZhangYv 给的链接有下面这些描述。我还是不很明白,人是笨家伙啊:) 哪位大哥用自然语言解释一下就好了。

...
#include <signal.h>
void (*signal (int sig, void (*func)(int)))(int);

That is to say, signal is a function that returns a pointer to another function. This second function takes a single int argument and returns void. The second argument to signal is similarly a pointer to a function returning void which takes an int argument.
...
Wolf0403 2004-10-07
  • 打赏
  • 举报
回复
up
ZhangYv 2004-10-07
  • 打赏
  • 举报
回复
http://publications.gbdirect.co.uk/c_book/chapter9/signal_handling.html
Jinhao 2004-10-07
  • 打赏
  • 举报
回复
typedef void (*PFUN)(int);
PFUN (*signal)(int, void(*)(int))

signal 就是你定义的东西
cxjddd 2004-10-07
  • 打赏
  • 举报
回复
static void finish(int sig);
signal(SIGINT, finish);
LoveCreatesBeauty 2004-10-07
  • 打赏
  • 举报
回复
void (*signal(int sig, void (*func)(int)))(int);

简化成下面这样:

void (*signal( ))(int);

1、void (*signal )(int); 把它看成这样的函数指针,但不明白signal后面那对括号;
2、void (*signal( )) ;
void *signal( ) ; 看作返回类型为void*的函数,但好像最后的那对括号(int)是多余的。
wanamaker 2004-10-07
  • 打赏
  • 举报
回复
void (*signal(int sig, void (*func)(int)))(int); 设定中断信号响应函数

sig:信号类型,可为以下值
SIGABRT Abnormal termination
SIGFPE Floating-point error
SIGILL Illegal instruction
SIGINT CTRL+C signal
SIGSEGV Illegal storage access
SIGTERM Termination request

void (*func)(int): 即将用于处理信号sig的函数指针

返回值 void (*)(int):当前(signal函数调用之前)处理信号sig的函数指针

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧