c陷阱與缺陷
對於經驗豐富的行家而言,得心應手的工具在初學時的困難程度往往要超過那些容易上手的工具。剛剛接觸飛機駕駛的學員,初航時總是謹小慎微,只敢沿著海岸線來回飛行,等他們稍有經驗就會明白這樣的飛行其實是一件多麼輕鬆的事。初學騎自行車的新手,可能覺得後輪兩側的輔助輪很有幫助,但一旦熟練過後,就會發現它們很是礙手礙腳。
這種情況對程式語言也是一樣。任何一種程式語言,總存在一些語言特性,很可能會給還沒有完全熟悉它們的人帶來麻煩。令人吃驚的是,這些特性雖然因程式語言的不同而異,但對於特定的一種語言,幾乎每個程式設計師都是在同樣的一些特性上犯過錯誤、吃過苦頭!因此,作者也就萌生了將這些程式設計師易犯錯誤的特性加以收集、整理的最初念頭。
我第一次嘗試收集這類問題是在2023年。當時,在華盛頓特區舉行的一次share(ibm 大型機使用者組)會議上,我作了一次題為「pl/i中的問題與『陷阱』」的發言。作此發言時,我剛從哥倫比亞大學調至at&t的貝爾實驗室,在哥倫比亞大學我們主要的開發語言是pl/i,而貝爾實驗室中主要的開發語言卻是c。在貝爾實驗室工作的10年間,我積累了豐富的經驗,深諳c程式設計師(也包括我本人)在開發時如果一知半解將會遇到多少麻煩。
2023年,我開始收集有關c語言的此類問題,並在年底將結果整理後作為一篇內部**發表。這篇**所引發的回應卻大大出乎我的意料,共有2 000多人向貝爾實驗室的圖書館索取該**的副本!我由此確信有必要將該**的內容進一步擴充,於是就寫成了現在讀者所看到的這本書。
本書是什麼
本書力圖通過揭示一般程式設計師,甚至是經驗老道的職業程式設計師,如何在程式設計中犯錯誤、摔跟頭,以提倡和鼓勵預防性的程式設計。這些錯誤實際上一旦被程式設計師真正認識和理解,並不難避免。因此,本書闡述的重點不是一般原則,而是乙個個具體的例子。
如果你是乙個程式設計師並且開發中真正用到c語言來解決複雜問題,這本書應該成為你的案頭必備書籍。即使你已經是乙個c語言的專家級程式設計師,仍然有必要擁有這本書,很多讀過本書早期手稿的專業c程式設計師常常感嘆:「就在上星期我還遇到這樣乙個bug!」如果你正在教授c語言課程,本書毫無疑問應該成為你向學生推薦的首選補充閱讀材料。
第1章 詞法「陷阱」
1.1 =不同於==
1.2 &和 | 不同於&&和 ||
1.3 詞法分析中的「貪心法」
1.4 整型常量
1.5 字元與字串
第2章 語法「陷阱」
第3章 語義「陷阱」
第4章 連線
第5章 庫函式
第6章 預處理器
第7章 可移植性缺陷
第8章 建議與答案
附錄a printf,varargs與stdarg
附錄b koenig和moo夫婦訪談
c陷阱與缺陷 陷阱
例1 if x y break 這就話的意思就是把y賦值x,判斷x是否為0,實則是在判斷y是否為0 例2 while c c t c n 這句話的意思就是 c t c n 賦值給c,而有 符本身就是不為0的數,所以這就是while 1 的意思。例3 int x 4,p new int p 2 cou...
C陷阱與缺陷
c語言對於符號 包含乙個或多個字元 的識別規則 每乙個符號應該包含盡可能多的字元。也就是說,編譯器將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分 如果可能,繼續讀入下乙個字元,重...
C陷阱與缺陷
1.int num 10 測試一下 num 0 是否 等於 0 num 因為num是首位址 num 0 0 num 2.其實c中只有一維陣列 我們所說的 int a 3 4 只是乙個包含了三個元素 每個元素都是包含了四個整形值的一維陣列 3.int num 10 10 int p num 0 名為n...