5.6 #define NULL((char *)0)可传入不加转换的NULL?

问题:

如果NULL定义成#define NULL ((char *)0)

难道不就可以向函数传入不加转换的NULL 了吗?

一般情况下, 不行。

复杂之处在于, 有的机器不同类型数据的指针有不同的内部表达。

这样的NULL 定义对于接受字符指针的的函数没有问题,

但对于其它类型的指针参数仍然有问题(在缺少原型的情况下),

而合法的构造如

FILE *fp = NULL;

则会失败。

不过, ANSI C 允许NULL 的可选定义

#define NULL ((void *)0)

除了潜在地帮助错误程序运行(仅限于使用同样类型指针的机器, 因此帮助有限) 以外,

这样的定义还可以发现错误使用NULL 的程序(例如, 在实际需要使用ASCII NUL 字符的地方; 参见问题5.7)。

无论如何, ANSI 函数原型确保大多数(尽管不是全部; 参见问题5.2)指针参数在传入函数时正确转换。

因此, 这个问题有些多余。

永不止步步 发表于01-14 10:21 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号