The Practice of Programming

In the preface, the author illustrates four basic principles of programming - simplicity, clarity, generality, automation.

I suppose that everyone has his own programming experience and preference, but with predecessors' valuable guidence, chances are that we can write more beautiful code.

Pieces of summaries and abstracts are organized as follows:


Charpter 1 STYLE

The purpose of style is to make the code easy to read for yourself and others, and good style is crucial to good programming.

  Names

  • descriptive names for globals, short names for locals
  • names with p for pointers; initial capital letters for Globals; all capitals for CONSTANTS; active names for functions
  • be consistent

  Expressions and Statements

  • avoid negative expressions possibly
  • use parentheses in mixed unrelated operators
     the relational operators (< == !=) have higher precedence than the logical operators (&&  || );
    the logical operators bind tighter than assignment ( = );
    the bitwise operators (& |) have lower precedence than relational operators ( == )
  • break up complex expressions
  • be careful with side effects:  (e.g. the following expression is wrong)
    scanf("%d %d", &yr, &profit[yr]);X  

  Consistency and Idioms

  • Use a consistent indentation and brace style
  • Use idioms for consistency
    Wrong code:
    gets(buf);X  //never use 'gets', 'fgets' is better
    p = malloc(strlen(buf));
    strcpy(p, buf);X  //strlen does not count the '\0' that terminates a string, while strcpy copies it
    Right code:
    p = malloc(strlen(buf)+);
    strcpy(p, buf);
  • the return value from malloc, realloc, strdup, or any other allocation routine should always be checked

  Function Macros

  • One of the most serious problems with function macros is that a parameter that appears more than once in the definition might be evaluated more than once

  Magic Numbers

  • By giving names to the principal numbers in the calculation, we can make the code easier to follow

  • Define numbers as constants, not macros

    const int MAXROW = . MAXCOL = ;
    static final int MAXROW = , MAXCOL = ;
    C also has const values but they cannot be used as array bounds, so the enum statement remains the method of choice in C.
  • Use the language to calculate the size of an object

    sizeof (int)
    sizeof(array[])
    sizeof(buf)

  

  Comments

  • Comment functions and global data
  • Sometimes code is genuinely difficult, perhaps because the algorithm is complicated or the data structures are intricate. In that case, a comment that points to a source of understanding can aid the reader

  • Don't comment bad code, rewrite it

  • Don't contradict the code. When you change code, make sure the comments are still accurate

Book Review of "The Practice of Programming" (Ⅰ)的更多相关文章

  1. Book Review of “The practice of programming” (Ⅳ)

    The practice of programming Chapter 4 Interfaces A good programmer should always be good at designin ...

  2. Book Review of “The practice of programming” (Ⅲ)

    The practice of programming Chapter 3 Design and Implementation In this section, we focus on one kin ...

  3. Book Review of “The practice of programming” (Ⅱ)

    The practice of programming Chapter 2 Algorithms and Data Structures Searching sequential search (li ...

  4. 2015年第2本(英文第1本):《The Practice of Programming》

    2015年计划透析10本英文原著,最开始选定的第一本英文书是<Who Moved my Cheese>,可是这本书实在是太短.太简单了,总体的意思就是要顺应变化,要跳出自己的舒适区,全文不 ...

  5. net programming guid

    Beej's Guide to Network Programming Using Internet Sockets Brian "Beej Jorgensen" Hallbeej ...

  6. FRP represents an intersection of two programming paradigms.

    FRP represents an intersection of two programming paradigms. Functional programming Functional progr ...

  7. [转]9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路

    1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...

  8. 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路

    1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...

  9. (转)9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路

    原文:http://www.cnblogs.com/figure9/archive/2013/01/09/2853649.html 1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也 ...

随机推荐

  1. IE的文档模式, 及Textarea呈现bug一例

    做了个非常简单的页面, 仅有几行html代码, 内容如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtm ...

  2. 深度扫盲O2O

    http://www.ftchinese.com/interactive/5038?i=3 http://www.ftchinese.com/interactive/5038?i=3

  3. Qunit 和 jsCoverage使用方法(js单元测试)

    Qunit 和 jsCoverage使用方法(js单元测试) 近日在网上浏览过很多有关js单元测试相关的文档,工具,但是,针对Qunit 和 jsCoverage使用方法,缺少详细说明,对于初入前端的 ...

  4. 对protected函数的简单理解 good

    对于protected提供的函数和属性,除非想扩充这个类的功能,否则是完全用不到的.外部函数main()永远只能调用public的那些函数.所以从拖拉控件编程的角度来讲,只需要学习public的函数和 ...

  5. eclipse欺骗了我

    Java源文件(.java)和Java的字节码文件(.class)跟 package 是个什么关系? 平时使用 eclipse 的时候,发现 .java 文件目录必须和 package 包名保持一致, ...

  6. 这些Python骚操作,你知道吗?

    0x00 世界,你好 ​程序员第一次接触语言或者框架,基本上都有个 Hello World 的例子,这里 Python 直接将它做成了一个包. 0x01 Python 哲学 ​ Python 执行 i ...

  7. Java I/O(一) NIO概述

    基本概念 BIO:是堵塞I/O,无论是磁盘I/O,还是网络I/O,数据在写入OutputStream和InputStream都可能发生堵塞,一旦有堵塞,线程会失去CPU的使用权(堵塞). NIO:简单 ...

  8. JavaScript-4.2函数,变量作用域---ShinePans

    <html> <head> <meta http-equiv="content-type" content="text/html;chars ...

  9. phpexcel导出带生成图片完美案例

    // 导出exl public function look_down(){ $id = I('get.id'); $m = M ('offer_goods'); $where['offer_id'] ...

  10. Linux环境Oracle相关操作命令行

        打开Oracle监听:lsnrctl start          关闭监听:   lsnrctl stop 监听关闭那么客户端无法连接 进入sqlplus:sqlplus /nolog  使 ...