免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9366 | 回复: 11
打印 上一主题 下一主题

#define SIG_DFL (int (*)())0 不明白,请赐教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-16 13:36 |只看该作者 |倒序浏览
(int (*)())0     这是什么定义方式?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-02-16 13:42 |只看该作者

#define SIG_DFL (int (*)())0 不明白,请赐教!

就是把0强制转换为一个指针,
此指针指向一个函数,
这个函数的返回值是int类型,没有参数。

论坛徽章:
0
3 [报告]
发表于 2004-02-16 14:05 |只看该作者

#define SIG_DFL (int (*)())0 不明白,请赐教!

谢谢。
但是我想问此时的SIG_DFL 可以作为0来使用吗?比如用于
switch()
{
case SIG_DFL :
.....
}
我觉得应该可以,但是在sco下编译: error: non-integral case expression

论坛徽章:
0
4 [报告]
发表于 2004-02-16 14:16 |只看该作者

#define SIG_DFL (int (*)())0 不明白,请赐教!

(int (*)())0  表示一个函数的入口地址,这个函数是一个空函数。
因此:
#define SIG_DFL (int (*)())0 的意思是将SIG_DFL定义成一个空函数,即什么也不做的函数,这个函数没有参数,也谈不上有什么返回值。

在swich () ...case语句中:
  case 后面需要跟的参数是一个整形变量或者整形常数,因此case 0是可以的,

   但是case ( (int (*)())0 )是不行的,这就相当于case后跟了一个函数指针作为参数了,同理:    case (  (int *) 0) 也是不行的。


不知道你清楚没有? :)

论坛徽章:
0
5 [报告]
发表于 2004-02-16 14:25 |只看该作者

#define SIG_DFL (int (*)())0 不明白,请赐教!

知道了,谢谢!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-02-16 15:54 |只看该作者

#define SIG_DFL (int (*)())0 不明白,请赐教!

原帖由 "aloneme_live" 发表:
(int (*)())0  表示一个函数的入口地址,这个函数是一个空函数。
因此:
#define SIG_DFL (int (*)())0 的意思是将SIG_DFL定义成一个空函数,即什么也不做的函数,这个函数没有参数,也谈不上有什么返回值。

?.........

可是你还没说(int (*)())的含义是什么。
int是做什么用的,*是什么意思。
SIG_DFL哪里是什么函数,是一个函数指针。

论坛徽章:
0
7 [报告]
发表于 2006-08-04 08:55 |只看该作者
定义了两个函数指针的常量
是函数指针,指向0和1
你看看signal()函数用法就知道了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-08-04 09:16 |只看该作者
原帖由 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.  */

论坛徽章:
0
9 [报告]
发表于 2006-08-07 15:17 |只看该作者
《C陷阱与缺陷》中有详细说明

论坛徽章:
0
10 [报告]
发表于 2006-08-07 16:31 |只看该作者
能不能做0用,是不是还要考虑另外一个问题

这个0时什么类型的????

或者说地址是多少位的,而你要用到的0是多少位
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP