天天看點

c語言123陷阱數,C語言陷阱及缺陷.pdf

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 語言至

少有個粗淺的了解。

第一部分研究了當程式被劃分為記号時會發生的問題。第二部分繼續研究了當程式