- 论坛徽章:
- 1
|
原帖由 aloneme_live 于 2004-2-16 14:16 发表
(int (*)())0 表示一个函数的入口地址,这个函数是一个空函数。
因此:
#define SIG_DFL (int (*)())0 的意思是将SIG_DFL定义成一个空函数,即什么也不做的函数,这个函数没有参数,也谈不上有什么返回值。
...
这个不对。
SIG_DFL是个值=NULL的函数指针,由于signal函数需要一个函数指针作为第二个参数,所以直接写
signal(SIGALRM, NULL);
是不规范的,应该写成
signal(SIGALRM, (void (*)(int))NULL);
为简化起见就用宏定义SIG_DFL
但这里的宏定义也是不标准的吧?
正确的SIG_DFL是这样的:
在signal.h中
/* Type of a signal handler. */
typedef void (*__sighandler_t) (int); 在signum.h中
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ |
|