- 论坛徽章:
- 0
|
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位
|