博客园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这种方式,其它更为经典的(有么?)我就不知道了。

c语言if文里null,C语言中if (p==NULL)的是与非相关推荐

  1. c语言if语句知识点总结,c语言中if语句知识点总结.docx

    c语言中if语句知识点总结.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  2. c语言eof不起作用,c语言中EOF的用法

    c语言中EOF的用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中EOF的用法 1.EOF是end of fi ...

  3. c语言中变量加1,c语言中,指针加1的情况.指针变量详细介绍

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...

  4. C语言中字母a等于,C语言中’a’和"a"有什么区别?,c语言中“!a"是什么意思啊...

    导航:网站首页 > C语言中'a'和"a"有什么区别?,c语言中"!a"是什么意思啊 C语言中'a'和"a"有什么区别?,c语言中"!a"是什么意思啊 匿名网友: 1.本质区 ...

  5. c语言new的作用,关于c语言中new的使用?

    必须使用malloc函数,因为C语言没有new这个操作符,但是如果你的编译器是C++的话,是可以使用new的. 所以程序就是: long *pNumber = (long*)malloc(sizeof ...

  6. c语言 strcpy原型,浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, cons ...

  7. c语言char有什么作用,C语言中char*和char[]用法区别分析

    本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指正 ...

  8. c语言char str什意思,C语言中,charstr的str到底表示什么?

    问题:C语言中,char str的 str到底表示什么? 描述: #include int main() { #第一处 char *pstr = "abcdef"; printf( ...

  9. c语言gets和getchar区别,C语言中 gets 和 getchar 有什么区别

    C语言中 gets 和 getchar 有什么区别 发布时间:2020-07-22 09:14:29 来源:亿速云 阅读:81 作者:Leah 这期内容当中小编将会给大家带来有关C语言中 gets 和 ...

最新文章

  1. Travis CI : 最小的分布式系统(二)
  2. DevExpress的PdfViewer添加工具栏实现PDF打开、预览、保存、打印
  3. RxJava 设计理念 观察者模式 Observable lambdas MD
  4. HDU4267(2012年长春站)
  5. leetcode542. 01 矩阵(bfs/dp)
  6. tp5 集成支付宝h5支付接口
  7. 记录——《C Primer Plus (第五版)》第八章编程练习第八题
  8. java hashMap缓存简单实现
  9. java 防止sql注入的方法(非原创)
  10. python基础代码大全-python基础语法,python 代码命令大全
  11. Adblock Plus无法屏蔽CSDN右下角广告解决
  12. Atitit 项目源码管理 attilax著 1. 源码结构sdk目录结构 1 1.1. 源码分类,配置文件,主程序文件,sql文件 1 2. 源码管理,提交,更新,与同步 1 2.1. 源码同步
  13. js写用户名密码错误提示_写给前端的 Jenkins 教程——快速实现前端/ Node.js 项目的 CI/CD...
  14. jeecg-boot配置菜单
  15. 单片机c语言论文,c语言数据小论文_c语言论文课题单片机_精通c语言
  16. 安装包制作工具 SetupFactory 详解
  17. Qt实现Toast提示消息
  18. 基于HTML和JS实现的保护海洋动物、保护环境的硬核小游戏
  19. Gary Marcus:因果熵理论的荒诞和认知科学带给AI的11个启示 | 文末赠书
  20. 自动爬取微博热门评论和点赞数并存为EXCEL文件(python2)

热门文章

  1. bagging与boosting的区别
  2. 删除PG数据库时报错database xxx is being accessed by other users
  3. H5+APP的几种实现形式
  4. Linux如何安装显卡驱动(GPU)
  5. python:statsmodels 一元线性回归分析
  6. 印象草原:来自大自然的慷慨赐予
  7. java与sql学生考勤管理系统_SSM实现学生考勤管理系统、javaweb+mysql
  8. html5拖拽式建站源码,拖拽式建站是怎么实现的,拖拽式h5建站源码
  9. css中div居中显示的四种方法
  10. 机器学习损失函数之似然函数