C语言中if (p==NULL)的是与非

标签: tech | 发表时间:2011-07-05 20:53 | 作者:admin Jerome
出处:http://sunxiunan.com

博客园cnblogs不知为何最近开始渐有C语言开发重启的迹象,不少人开始写一些C语言的教程。

其中看到一段有趣的留言,提到这个写法:if (p == NULL),

有人说这是不好的~,经典不提倡的~,会写错出问题的~,华为都禁止的~。

 

我倒是有些不同的看法。

 

首先这种写法是有问题,一般来讲对于空指针可以这样写

if ( p )

或者反义是这样 if ( !p )

既简单,还节省字数。

 

如果是想写的比较容易懂,那么if (p == NULL) 是我提倡的方式。

你可以很简单的读成“如果p等于空值”,反过来的方式NULL==p就有些别扭,不是给人看的。

 

有人提到p==NULL很容易写成p=NULL,代码出错啦!会有bug啦!

 

好吧,我承认这是一种可能性,在早期编译器不完善的时候的确如此。那时候还提倡用匈牙利命名法,因为编译器对类型识别支持不好,很容易写出胡乱转型的代码(当然现在的C语言也容易)。但是针对正在使用的编译器以及将来更先进的编译器,在条件判断中使用p==NULL不是问题。

 

做一个很简单的实验,使用VC2010,项目设置为compile as C,注意关键一点“把warning级别提高到最高级别4”,这时候if (p=NULL )会得到如下警告:

1>purec.cpp(10): warning C4706: assignment within conditional expression

很简单吧,不需要你使用那种反人类常识的代码规范。

 

使用GCC(v4.5.2 in Ubuntu11.4)也很容易,它有一个编译选项-Wall,警告信息如下:

/home/sun/foobar-sample/main.c:24:2: warning: suggest parentheses around assignment used as truth value

 

如果工具支持,为何不使用一种更为合乎阅读习惯的方式呢,BTW,我查找了一下经典的K&R,其中==的使用都是我提到的p==0这种方式,其它更为经典的(有么?)我就不知道了。

相关 [语言 if null] 推荐:

C语言中if (p==NULL)的是与非

- Jerome - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
博客园cnblogs不知为何最近开始渐有C语言开发重启的迹象,不少人开始写一些C语言的教程. 其中看到一段有趣的留言,提到这个写法:if (p == NULL),. 有人说这是不好的~,经典不提倡的~,会写错出问题的~,华为都禁止的~. 首先这种写法是有问题,一般来讲对于空指针可以这样写. 或者反义是这样 if ( !p ).

undefined与null的区别

- - 阮一峰的网络日志
大多数计算机语言,都有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的none,Ruby语言的nil. 有点奇怪的是,JavaScript语言居然有 两个表示"无"的值:undefined和null. 在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别.

为什么字段尽可能用NOT NULL,而不是NULL

- - IT技术博客大学习
字段尽可能用NOT NULL,而不是NULL,除非特殊情况. 这句话在mysql优化的文章被大量的引用,但却不说明原因,下面就讲述一下相关内容. NULL 为什么多人用. 1、NULL是创建数据表时默认的,初级或不知情的或怕麻烦的程序员不会注意这点. 2、很多人员都以为not null 需要更多空间,其实这不是重点.

Java中有关 null 的9件事

- - CSDN博客推荐文章
Java中有关 null 的9件事. 对于Java程序员来说,null是令人头痛的东西. 时常会受到空指针异常(NPE)的骚扰. 连Java的发明者都承认这是他的一项巨大失误. Java为什么要保留null呢. null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java.

hive 配置文件以及join中null值的处理

- - CSDN博客云计算推荐文章
1.  三种设定方式:配置文件. ·   用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml. ·   默认配置文件:$HIVE_CONF_DIR/hive-default.xml. 用户自定义配置会覆盖默认配置. 另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hadoop的配置文件包括.

笔记:mysql中的null值和空值区别

- - jackyrong
mysql中的null值和空值区别,注意到null值是未知的,占用空间,并且不走索引;下面转载两篇文笔记之:. 相信很多用了mysql很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:. 1、我字段类型是not null,为什么我可以插入空值. 2、为毛not null的效率比null高.

语言壁垒

- kylexlau - Chun Tian (binghe)
虽然经常更新微博,但确实又有些日子没写常规博客了. 10 月开始前有必要再写一篇,整理一下近期的各种思路,以良好的精神面貌迎接今年的最后一个季度. 首先发布一个已经不太新的消息:Practical Common Lisp 的中文版《实用 Common Lisp 编程》几经周折终于付印了,下月即可正式出版;读者们甚至已经可以在当当网上预订了.

UnQL:NoSQL查询语言

- 卡飞菲 - Solidot
CouchDB作者Damien Katz与SQLite作者Richard Hipp正在为NoSQL文档数据库开发一种高级查询语言UnQL(发音同Uncle,是UNstructured Query Language的缩写). Katz表示,他们坚信为了推广NoSQL需要一种通用的查询语言,类似当年推广关系型数据库应运而生的SQL语言.

Go 语言初步

- wei - 云风的 BLOG
所谓认真玩,就是拿 Go 写点程序,前后大约两千行吧. 据说 Go 的最佳开发平台是 Mac OS ,我没有. Windows 版还没全部搞定,但是也可以用了. 如果你用 google 搜索,很容易去到一个叫 go-windows 的开源项目上. 如果你用这个,很多库都没有,而且语法也是老的. 我在 Windows 下甚至不能正确链接自己写的多个 package.

C语言之父

- Dylen - 子说
同事说c语言之父去世了,另一个同事大吃一惊,问:谭浩强死了. 不知丹尼斯·里奇(Dennis Ritchie)情何以堪.