关于NULL的声明(#define NULL 0, const int NULL = 0; ...)到底那个更好?为什么?

eastnofail 2005-08-17 03:06:36
在很多书上看到讨论NULL声明的问题,有的说应该使用 #define NULL 0,有的说应该使用常量的整数0,有的则说使用常量整数更不好,有的则说不要使用0而应该使用类似0xFFFFFFFF这样的值,

但是可恶的是这些书也没有具体详细的阐述为什么要这样做,都是如《C++ 程序设计语言》里面说的一段话: "在 C 中流行的是用一个宏 NULL 来表示 0 指针。由于 C++ 收紧的类型检查规则,采用普通的 0 而不是一些人建议的 NULL 宏,带来的问题会更少一些。如果你感到必须定义 NULL,请采用:const int NULL = 0;"

我想知道什么叫 "C++ 收紧的类型检查规则",以及为什么要围绕NULL值展开讨论,最好能举例说明各种声明的有点以及缺点,谢谢!
...全文
636 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhfu 2005-08-18
  • 打赏
  • 举报
回复
为了名副其实的面向对象,就不要用
#define NULL 0
HaoyuTan 2005-08-18
  • 打赏
  • 举报
回复
healer_kx(天降甘草) ( )

再说句大逆不道的话,C++的标准就是一个鸟。。。 。。。

----------------------------------------------------------------

的确够大逆不道的.


(不过const int NULL这个似乎也不会很耗啊,但是肯定是运行时才分配吧?用到NULL的时候都会访问内存一次? 我个人的粗浅理解,其实频繁访问内存是效率不高的。)

----------------------------------------------------------------------------------------

const int NULL = 0;的效率和#define NULL 0完全一样,都是用0直接替换
jixingzhong 2005-08-18
  • 打赏
  • 举报
回复
#define NULL 0
都用的这个 ..
yjh1982 2005-08-18
  • 打赏
  • 举报
回复
#define NULL 0
更通用,可以赋给整形和指针
OMA_yudy 2005-08-18
  • 打赏
  • 举报
回复
#define NULL 0

支持这个。

#define NULL ((void*)0)
the777 2005-08-18
  • 打赏
  • 举报
回复
楼主的到底会不会用C++???
谁说 void* p = 0 不能使用???
我一直都是给空指针赋值为0。
其实NULL在VC中已经定义好了,定义文件就在iostream 里面。不需要你去定义,要用NULL直接用就行了。
johnzhaobing 2005-08-18
  • 打赏
  • 举报
回复
看编译器而定
HaoyuTan 2005-08-18
  • 打赏
  • 举报
回复
const int NULL = 0;
不是处处都能用吧
K 2005-08-18
  • 打赏
  • 举报
回复
#define NULL 1
snowbirdfly 2005-08-18
  • 打赏
  • 举报
回复
支持楼上说法~~~
C++中const与c语言预定义用define一样功能 ~~~
但是要是面对对象,最好用前者~~~
NULL用法上面已经讲的很详细了.
diandian82 2005-08-17
  • 打赏
  • 举报
回复
在林锐的高质量C++编程里面我记得是推荐使用NULL的,但在《C++ 程序设计语言》C++语言之父说使用0,我也晕!
EarthKing 2005-08-17
  • 打赏
  • 举报
回复
To healer_kx(天降甘草):
void* p = 0;
是可以的, 你可以在VC下面试试.
XBox360 2005-08-17
  • 打赏
  • 举报
回复
NULL是这样定义的#define NULL 0
但是定义其他东西,C++里推荐用const
slashjojo 2005-08-17
  • 打赏
  • 举报
回复
const编译的时候要类型检查
define编译不类型检查

NULL很特殊,大部分时间都用指针,指针是有类型的,用const就不好描述了。
copygirl 2005-08-17
  • 打赏
  • 举报
回复
#define NULL 0
PMsg 2005-08-17
  • 打赏
  • 举报
回复
const可以防止NULL被重新定义……
俺说的对吗
healer_kx 2005-08-17
  • 打赏
  • 举报
回复
再说句大逆不道的话,C++的标准就是一个鸟。。。 。。。

  • 打赏
  • 举报
回复
NULL 的用处比较广, 觉得使用通用一点的定义来的好。所以还是
#define NULL 0

至于 收敛的类型检查规则 ,就是类型必须匹配, 不同类型不能进行赋值、比较以及其他的操作。
qfeng_zhao 2005-08-17
  • 打赏
  • 举报
回复
习惯用这个:#define NULL 0
原因楼上都说了大半了,主要是可以给指针赋值,没有强自类型来限制

不过要是别的一个常量,我觉得用常量定义或许更好一点
比如:const int MAX 100
c++primer上也推荐用常量定义,因为#define只是进行简单的数值替换,会引发很多问题
比如上面,编译时如报错,报的也是100,而不是MAX,这样可能被搞得一头雾水
junguo 2005-08-17
  • 打赏
  • 举报
回复
定义NULL对应所有类型的话,应该使用define!
例如:
const int null = 0 ;
string s = null;
这样的程序是要报错的!这就是 收紧的类型检查规则 了,必须同一类型的才可以赋值!

其它一些情况下,推荐使用const!具体可以参考effective c++,第一条款就是详细的说明!
加载更多回复(1)
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平;2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧