在erlang上工作久了之后发现自己对底层的知识越来越模糊了,所以决定最近重新学习一下C语言,在有一定基础的情况我觉得应该找一个更高效编程的书来读读(一直在想怎么写出更优雅的代码),翻翻自己的电子书库就找到了《C接口与实现》在优雅编程方面这确实是一本很好的书,书中讲到了文学化的编程。这里是一个书中比较好的内容的摘抄和笔记。
变量命名对每个人程序员来说是很头痛的,一个变量命名的好坏也就基本上体现出这个人的编码素养了。“In general, longer, evocative names are used for global variables and routines, and short names, which may mirror common mathematical notation, are used for local variables.”
这里举了一个很好的理解在for循环中的局部变量i取了一个很冗长的名字,这样在代码的可读性上面就损失了很多。
变量在第一次使用之前声明, 代码的长度不要超过一页 (14寸笔记本一屏最合适了)。
尽量遵循代码就是最好的注释的原则,comments只出现在数据结构/算法的说明中。
软件的可靠性要比效率更重要(其实这一点我们很容易忽略掉,有时候我们希望软件运行的更快一味地去优化,如果此时引入了一个crash的话对客户是灾难性的,还有一点就是legacy broken比一个新的feature或者性能提高十倍更可怕)
书中对宏定义和条件编译的理解很有意思,还几个之前看过一段代码,里面对各个平台定义了不同的宏,’#ifdef #end看着确实难受, 使用交叉编译确实是一个很好的注意。
习题 1.1
<scan forward to a nonspace or EOF 6 >的目是找个一个单词的开始位置,linenum在这里++有以下几个目的:
单词不会跨行出现,在找一个单词的开始位置的时候发现一个‘n’就说明之后出现的单词是在下一行,linenum++这是一个很合理的过程。
如果你在7之后发现一个‘n’之后+1可能出现的结果就是输出这次返回的word的时候linenum +1了。
习题 1.2
这里主要是判断如果单词重复出现的话继续去取下一个单词,之后看下如果大于等于2则输出即可。
-END-
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。