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. 几何画板给word绘制图形的方法

    几何画板是一款专门用来绘图的工具,它里面有很多的绘图工具和功能菜单,都是专门为画图而设计的,比如一些理科的期刊杂志论文出版的时候,里面所涉及到的图形很多都是用几何画板画出来的.下面就根据几何画板教程来 ...

  2. 剑指offer(13)-栈的压入、弹出序列 九度1366

    题目来自剑指offer系列 九度 1366:http://ac.jobdu.com/problem.php?pid=1367 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列 ...

  3. iOS -转载-字符串是否为空判断方法

    - (BOOL)blankString{ if (![self isKindOfClass:[NSString class]] ){ return YES; } if ([self isEqual:[ ...

  4. UI层复习笔记

    在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是整个应用程序的一 ...

  5. [LintCode] 带最小值操作的栈

    class MinStack { public: MinStack() { // do initialization if necessary } void push(int number) { // ...

  6. JAVA 遍历文件夹下的所有文件(递归调用)

    package file; import java.io.File; public class Test1 { public static void main(String[] args) { Str ...

  7. java获取地址全路径

      String basePath = request.getScheme()+"://"+request.getServerName()+":"+reques ...

  8. 关于vtt 与 srt 字幕 的相互转换

    我在下载的udacity中教程时,字幕和视频是分离的,对于英文还无法完全听懂的我来说,字幕还是比较重要.不想看解释的可直接跳到最后复制代码运行即可. 查看了vtt和srt的区别,使用记事本打开vtt和 ...

  9. js生成二维码/html2canvas生成屏幕截图

    1.需求简述 (1) 最初需求: 根据后台接口获取url,生成一个二维码,用户可以长按保存为图片.(这时的二维码只是纯黑白像素构成的二维码) 方案1: 使用jquery.qrcode.min.js插件 ...

  10. SQL 数据库无法附加,提示 MDF" 已压缩

    SQL 数据库无法附加,提示 MDF" 已压缩,但未驻留在只读数据库或文件组中.必须将此文件解压缩 1右键点击数据库所在的文件夹,  2点击属性,在常规选项卡中点击高级,  3在弹出的窗口中 ...