免费注册 查看新帖 |

Chinaunix

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

关于execl族命令行参数的最后一个参数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-04 09:54 |只看该作者 |倒序浏览
5可用积分
apue2,第8章第10节,提到
execl, execle, and execlp 这三个函数的命令行参数形式为

   char *arg0, char *arg1, ..., char *argn, (char *)0

如果最后一个参数用常数0,必须把它转换成指针。否则的话,如果整数的size跟char *不一样,实际的参数就会出错。


通常整数的值是用补码来表示吧,整数0和char*的0表示的时候每个bit都是全0,那就算有截断或者补位还是全0,并没有错。
想问一下,具体什么情况下会出错?是否指非全0表示的情况。

如果不出错的话,C++作为强类型语言,建议使用0替代NULL宏赋给指针很正常;但出错的话,BS岂不是不该这样建议?

到底Stevens和BS谁的结论有误?还是有折衷的分析实际上两位大师都是对的,比方说0在C++更灵活些。但至少我觉得Stevens还是应该讲得更透彻点,以让我这样的平庸之辈能更好地理解他的传世大作

最佳答案

查看完整内容

C++中#define NULL 0C++中允许0到任意类型空指针的转换C中#define NULL (void *)0另外int和指针类型的长度可能是不一样的,在64位机上的可能是int32位,指针64位,long64位

论坛徽章:
0
2 [报告]
发表于 2008-09-04 09:54 |只看该作者
C++中#define NULL 0
C++中允许0到任意类型空指针的转换

C中#define NULL (void *)0

另外int和指针类型的长度可能是不一样的,在64位机上的可能是int32位,指针64位,long64位

论坛徽章:
0
3 [报告]
发表于 2008-09-04 09:58 |只看该作者
还是区分开比较好,指针用NULL,整数用0,字符用'\0'等。。

论坛徽章:
0
4 [报告]
发表于 2008-09-04 10:03 |只看该作者
apue 写得是 (char *)0

man execl 要求的是a NULL pionter

论坛徽章:
0
5 [报告]
发表于 2008-09-04 10:10 |只看该作者
原帖由 5毛党党员 于 2008-9-4 10:03 发表
apue 写得是 (char *)0

man execl 要求的是a NULL pionter

C中允许void *可以和任意类型指针相互转换
C++中只允许带类型的指针到void *的转换,不允许另一方向的转换

论坛徽章:
0
6 [报告]
发表于 2008-09-04 10:16 |只看该作者
是的,0在C++里面比较特殊,可以赋给任何类型的指针。在C里0没有这个特殊性。

论坛徽章:
0
7 [报告]
发表于 2008-09-04 10:16 |只看该作者
如果是C和C++对0的定义有所不同,我想问题就解决了,那样的话不知道可不可以把分数给自己

论坛徽章:
0
8 [报告]
发表于 2008-09-04 10:18 |只看该作者
原帖由 guile 于 2008-9-4 10:16 发表
如果是C和C++对0的定义有所不同,我想问题就解决了,那样的话不知道可不可以把分数给自己


。。。不可以给自己吧

论坛徽章:
0
9 [报告]
发表于 2008-09-04 10:18 |只看该作者
原帖由 emacsnw 于 2008-9-4 10:16 发表
是的,0在C++里面比较特殊,可以赋给任何类型的指针。在C里0没有这个特殊性。


感觉这个是最贴切的,

若无更好的答复,我就给分这个答案。

谢谢所有回复的人

论坛徽章:
0
10 [报告]
发表于 2008-09-04 10:19 |只看该作者

回复 #8 5毛党党员 的帖子

看了下还真没这个选项
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP