作者eagle36 ()
看板C_and_CPP
标题[问题] (ptr == NULL) 和 (ptr) 的差别
时间Sat Apr 9 01:14:26 2011
当测试指标的时候常会使用到例如:
if (ptr != NULL)
{
free(ptr);
ptr == NULL;
}
但是看到一篇文章 Mozilla coding style写道
https://developer.mozilla.org/En/Mozilla_Coding_Style_Guide
- Don't use NULL for pointers. On some systems it's declared as void * and
causes a compile warning when assigned to a pointer. Use 0 or nsnull
instead.
- When testing a pointer, use !myPtr or (myPtr); don't use myPtr != nsnull or
myPtr == nsnull.
- Do not compare x == PR_TRUE or x == PR_FALSE. Use (x) or (!x) instead. x ==
PR_TRUE, in fact, is different from if (x)!
我看到 void * 想说是否可携性有关,例如 16bit or 32bit等等,不过又不是很确定,
让我有些困惑,有人知道为什麽他会这样写吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.156.151
1F:→ tropical72:昨天刚好问到,上网查了资料,sizeof(void/void*)确实有 04/09 01:24
3F:→ legnaleurc:用 0 也有问题吧 ... 要是有的系统的 null_ptr 不是0呢 04/09 01:27
4F:→ loveme00835:0 只是一个标兵值, 当大家统一用某个奇怪的数值也无 04/09 01:29
5F:→ loveme00835:不可, 第一点确实有型态上不相容的问题, 第二点看看就 04/09 01:30
6F:→ loveme00835:好, 这样只是极尽简短程式码而已, 对阅读无益, 第三点 04/09 01:31
7F:→ loveme00835:是可以遵守, 前提是你命名都像像 is_avaiable、 04/09 01:32
8F:→ loveme00835:is_empty 一样好读 × 04/09 01:33
9F:推 legnaleurc:它用 !ptr 就已经算是假设 null==0 ... 这怎麽好像在 04/09 01:33
10F:→ legnaleurc:砸自己的脚啊 ... 04/09 01:34
11F:→ firejox:当然有非0的NULL_ptr 04/09 01:35
13F:推 softwind:pointer size本来就是target machine相依 一致即可~ 04/09 01:58
14F:→ softwind:(void*) 比较难让人接受的是 gcc会把 (void*)++当成char* 04/09 01:59
15F:→ xatier:推 firejox C FAQ 04/09 12:36
16F:推 LPH66:但是我记得 C 语言规定数值 0 若转成指标必须是 NULL 指标 04/09 19:54
17F:→ LPH66:不管那个机器实际上的 NULL 指标值到底是多少... 04/09 19:54
18F:→ LPH66:所以基本上用 0 一定是没问题的 04/09 19:55