C 語言陷阱和缺陷[1]
winxos 11-01-28
winxos 11-01-28
原著:Andrew Koenig - AT&T Bell Laboratories Murray Hill, New Jersey 07094
原文:收藏
翻譯:lover_P
[譯序]
那些自認為已經“學完”C 語言的人,請你們仔細讀閱讀這篇文章吧。路還長,很多東西要學。我
也是„„
[概述]
C 語言像一把雕刻刀,鋒利,并且在技師手中非常有用。和任何鋒利的工具一樣,C 會傷到那些不
能掌握它的人。本文介紹C 語言傷害粗心的人的方法,以及如何避免傷害。
[内容]
0 簡介
1 詞法缺陷
o 1.1 = 不是 ==
o 1.2 & 和 | 不是 && 和 ||
o 1.3 多字元記号
o 1.4 例外
o 1.5 字元串和字元
2 句法缺陷
o 2.1 了解聲明
o 2.2 運算符并不總是具有你所想象的優先級
o 2.3 看看這些分号!
o 2.4 switch語句
o 2.5 函數調用
o 2.6 懸挂else 問題
3 連結
o 3.1 你必須自己檢查外部類型
4 語義缺陷
o 4.1 表達式求值順序
o 4.2 &&、||和!運算符
o 4.3 下标從零開始
o 4.4 C 并不總是轉換實參
o 4.5 指針不是數組
o 4.6 避免提喻法
o 4.7 空指針不是空字元串
o 4.8 整數溢出
o 4.9 移位運算符
5 庫函數
o 5.1 getc()傳回整數
o 5.2 緩沖輸出和記憶體配置設定
6 預處理器
o 6.1 宏不是函數
o 6.2 宏不是類型定義
7 可移植性缺陷
o 7.1 一個名字中都有什麼?
o 7.2 一個整數有多大?
o 7.3 字元是帶符号的還是無符号的?
o 7.4 右移位是帶符号的還是無符号的?
o 7.5 除法如何舍入?
o 7.6 一個随機數有多大?
o 7.7 大小寫轉換
o 7.8 先釋放,再重新配置設定
o 7.9 可移植性問題的一個執行個體
8 這裡是空閑空間
參考
腳注
0 簡介
C 語言及其典型實作被設計為能被專家們容易地使用。這門語言簡潔并附有表達力。但有一些限制
可以保護那些浮躁的人。一個浮躁的人可以從這些條款中獲得一些幫助。
在本文中,我們将會看一看這些未可知的益處。這是由于它的未可知,我們無法為其進行完全的分
類。不過,我們仍然通過研究為了一個C 程式的運作所需要做的事來做到這些。我們假設讀者對C 語言至
少有個粗淺的了解。
第一部分研究了當程式被劃分為記号時會發生的問題。第二部分繼續研究了當程式