在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-spa