最近花了一些时间看了这本书,书名是
《Writing Clean Code ── Microsoft Techniques for Developing Bug-free C Programs》

这里主要总结了一些里面的编程思想。

为空语句加上NULL

当需要使用空语句的时候,最好写上NULL, 比如:
  1. if (music_on())
  2. NULL;
  3. else
  4. turn_it_on();

参数类型相同的问题

如果函数中两个参数的类型相同,如果用户调用这个函数时错误替换了参数的顺序,就会出现问题。

比如
  1. bool are_you_that_guy(int id, int year)
这里如果可以修改其中一个类型的话(比如把int改成short),当写反参数时,编译器会做出警告,进而可以避免这种问题。

代码查错

不要依赖测试人员帮你查出代码中的问题,在写代码的时候要尽量做单元测速,保证每个单元都没有问题,这样做似乎会花费大量精力,而且会拖延进度,但是对于最后是由很大好处的,要知道程序员一般会花大部分时间来解bug,让bug在摇篮中被扼杀是一个好事情。不过对于维护一堆庞大代码的程序员来说就不一样了。

再写代码的时候要善用ASSERT,做好一个DEBUG开关,当release给客户的时候将ASSERT去掉。ASSERT的作用是将真正的错误显露出来(比如向函数传入了一个NULL指针),断言的是真正的用法不当,而不是一般的错误(比如内存分配失败,返回NULL)。

使用lint等工具也可以帮忙分析代码中的问题。(我没用过,后面试试)。实际上使用GCC的Wall开关就可以得到很多warning,进而解除一些问题。

可以写两个不同版本的代码来查错,一个是效率较低的,用于验证的代码,另一个是需要release的代码。

对代码进行逐条跟踪,对于每一种情况进行单元测试,这一点可能很多人做不到。

代码风格

不要让函数既返回结果,又返回错误代码。最具表现性的是

  1. int getchar ( void );
当正确的时候返回一个int。getchar为什么返回int而不是返回char,这让人感到不可思议,实际上int值是为错误的情况准备的,也就是EOF

EOF的定义:
It is a macro definition of type int that expands into a negative integral constant expression (generally, -1).

这里可以认为它是-1.所以这样一来就很容易出问题了。好的做法应该将数据传入到函数的括号中,函数调用正确与否赋给返回值,比如:

  1. int getchar(char *char_val);


不要写稀奇古怪的代码

好的代码应该是具有可维护性的,因为总会有新手来维护你的代码。当你把所有
代码都挤在一行,比如这种类型:

  1. plan = planA ? (planB ? planC : planX) : (planD ? planE : planY)
这样会让人摸不着头脑。应该将它们拆成if和else语句,如果if和else嵌套太深,那么就是自己的设计问题了。
实际上不要用类似名称的变量,比如planA和planB,很容易搞混。


不要随便改别人代码

这个条款看起来不可理喻,有时候也会该出问题,除非你进行了详尽的测试。

比如将 
  1. int identity;
  2. identity = whois(tanhangbo);
  3. TELL(identity );
改成
  1. TELL(whois(tanhangbo))
如果TELL的定义是
  1. #define TELL(x) (x + x*2)
那么whois会被调用两次。



知错能改

当然了,最重要的准则,同一个错误不要犯两遍。



--------------------
需要注意的东西还是很多的,这里只是提到了一部分。
写代码的时候还是要多思考的,如何能写出好代码,容易维护,bug少。这本书还是不错的,推荐看一看。



为知笔记的内容发到博客园还是有点问题,其中代码格式化好之后再发上去,格式就没了。不过能够方便地发上去已经不错了。




Writing Clean Code 读后感的更多相关文章

  1. Writing clean code is what you must do in order to call yourself a professional.

    Clean Code  A Handbook of Agile Software Craftsmanship

  2. 代码整洁之道Clean Code 读后感After Reading

    1.有意义的命名 名副其实,避免误导 做有意义的区分,简单明了2.函数 短小,职责单一 别重复自己3.注释 用代码来阐述 可怕的废话4.格式 垂直格式,垂直距离,空范围 横向格式,水平对齐,缩进5.错 ...

  3. [转]Clean Code Principles: Be a Better Programmer

    原文:https://www.webcodegeeks.com/web-development/clean-code-principles-better-programmer/ ----------- ...

  4. Clean Code–Chapter 7 Error Handling

    Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...

  5. Clean Code – Chapter 3: Functions

    Small Blocks and Indenting The blocks within if statements, else statements, while statements, and s ...

  6. 说说怎么写clean code

    前两天参加了公司组织的一个培训,主题是“如何写出好的代码” ,刚看到这个主题,第一反应是又不知道是哪个培训机构来忽悠钱的!老大安排了,就去听听呗. 说实在的,课程内容没有什么新鲜的东西,就是讲讲如何发 ...

  7. 小课堂week13 Clean Code Part2

    Clean Code Part2 对象与数据结构 首先让我们进行一个严肃的思考,对象与数据结构的区别在哪里? 如下两段代码分别用数据结构和对象的方法来描述了一个Point. public class ...

  8. 小课堂Week12 Clean Code Part1

    小课堂Week12 Clean Code Part1 今天的主题是函数,让我们看一个函数,找一找其中的"不整洁". 我们也根据这段代码,讨论下对于整洁代码的两个重要原则. publ ...

  9. “Clean Code” 读书笔记序

    最近开始研读 Robert C.Martin 的 “Clean Code”,为了巩固学习,会把每一章的笔记整理到博客中.而这篇博文作为一个索引和总结,会陆续加入各章的笔记链接,以及全部读完后的心得体会 ...

随机推荐

  1. “.”(十六进制值 0x00)是无效的字符解决方案

    自从我们的项目数据层从读取数据库改为读取接口服务后,经常会出现一些类似于的错误.我们的数据结构如下所示 <type><![CDATA[gp]]></type> &l ...

  2. c#使用json接口

    前些日子将项目由使用数据库改版为使用接口,由于接口返回的xml中多了一些附加信息,导致xml转化后的DataTable无法储存在MemCache中.这时可以将xml序列化为其对应的类,当然由于当时对x ...

  3. 熟悉vs2012IDE

    使用vs2012已经几个月了,深感对开发环境的学习有助于提高开发的效率.现将我的经验总结如下: 一.搜索 vs2012相比vs2010添加了正则搜索,极大的提高了代码的查询效率. 二.重构 同vs20 ...

  4. iOS Xcode 打包之后,不能输出日志

    现象:一个项目,之前做的好好的,后来打包,生成ipa文件之后, 再运行的时候,NSLog的日志都不输出了. 解决方案: 在模式选择里面,里面包含:“Debug”.“Release”两种,设置“Debu ...

  5. Android Studio安装配置、环境搭建详细步骤及基本使用

    前言 Android Studio的安装配置及使用篇终于来啦~ 废话不多说,以下针对JDK正确安装(及其环境变量配置完毕,即Java开发环境下).Android Studio的安装,配置,以及创建工程 ...

  6. Linux安全基础:sed命令的使用

    sed 是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. Sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...

  7. SharePoint 自定义的列表页面中添加javascript的一个 For循环语句后,该页面就打不开了。

    一个sharepoint 2013的普通的列表的自定义新建页面,我在其中新添加几行javascript代码后页面就打不开了.如图所示: 真是一言不合,友谊的页面说打不开就打不开啊.后来慢慢比对发现是因 ...

  8. iOS之ShareSDK实现分享、第三方登录等功能

    (1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...

  9. eclipse配置tomcat 和JRE环境

    配置JRE环境,通俗点讲就是添加一个不同版本的jdk window——preferences——java——installed jres 点击add添加   选择standard VM 选择一个本机正 ...

  10. Socket.IO聊天室~简单实用

    小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...