C語言大師經典名作至今仍然歷久不衰
幫助你避開編寫C語言時各種意外陷阱
無論是新手老手高手都應該要案頭備存
作者以自己1985年在Bell實驗室時發表的一篇論文為基礎,結合自己的工作經驗,進而成為這本對C語言程式設計師具有珍貴價值的經典著作。寫作本書的出發點並不是要批判C語言,而是要幫助C語言程式設計師繞過編寫過程中的陷阱和障礙。
全書分為8章,分別從詞法分析、語法語義、連接、庫函數、預處理器、可移植性缺陷等幾個方面,分析了在C語言編寫中可能遇到的問題。最後,作者用一章的篇幅提供了若干具有實用價值的建議。
本書適合有一定經驗的C語言程式設計師閱讀學習,即便你是C語言編寫高手,本書也應該成為你案頭上的必備書籍。
作者簡介:
Andrew Koenig
AT&T大規模程式研發部(前貝爾實驗室)成員。他從1986年開始從事C語言的研究,1977年加入貝爾實驗室。他編寫了一些早期的類別庫,並在1988年組織召開了第一個相當規模的C++會議。在ISO/ANSI C++委員會成立的1989年,他就加入了該委員會,並一直擔任專案編輯。他已經發表了C++方面的100多篇論文,在Addsion-Wesley出版了《C Trap and Pitfalls》,和《Ruminations on C++(C++沉思錄)》(博碩出版)還應邀到世界各地演講。
Andrew Koenig不僅有著多年的C++開發、研究和教學經驗,而且還親身參與了C++的演化和變革,對C++的變化和發展發揮重要的影響。
目錄
CHAPTER 00 導讀
CHAPTER 01 詞法陷阱
1.1 = 不同於==
1.2 & 和 | 不同於 && 和 ||
1.3 詞法分析中的「貪心法」
1.4 整數型常數
1.5 字元與字串
CHAPTER 02 語法陷阱
2.1 理解函數宣告
2.2 運算子的優先級問題
2.3 注意作為語句結束標誌的分號
2.4 switch 語句
2.5 函數呼叫
2.6 「懸掛」else 引發的問題
CHAPTER 03 語義陷阱
3.1 指標與陣列
3.2 非陣列的指標
3.3 作為參數的陣列宣告
3.4 避免「舉隅法」
3.5 空指標並非空字串
3.6 邊界計算與不對稱邊界
3.7 求值順序
3.8 運算子&&、|| 和 !
3.9 整數溢出
3.10 為函數main提供返回值
CHAPTER 04 連結
4.1 什麼是連結器
4.2 宣告與定義
4.3 命名衝突與static修飾子
4.4 形式參數、實際參數與返回值
4.5 檢查外部類型
4.6 標頭檔
CHAPTER 05 庫函數
5.1 返回整數的getchar函數
5.2 更新順序檔案
5.3 緩衝輸出與記憶體分配
5.4 使用 errno 檢測錯誤
5.5 庫函數 signal
CHAPTER 06 預處理器
6.1 不能忽視巨集定義中的空格
6.2 巨集並不是函數
6.3 巨集並不是語句
6.4 巨集並不是類型定義
CHAPTER 07 可移植性缺陷
7.1 應對 C 語言標準變更
7.2 識別子名稱的限制
7.3 整數的大小
7.4 字元是有符號整數還是無符號整數
7.5 移位運算子
7.6 記憶體位置
7.7 除法運算時發生的截斷
7.8 亂數的大小
7.9 大小寫轉換
7.10 首先釋放,然後重新分配
7.11 可移植性問題的一個例子
CHAPTER 8 建議與答案
8.1 建議
8.2 答案
附錄A
附錄B
CHAPTER 00 導讀
CHAPTER 01 詞法陷阱
1.1 = 不同於==
1.2 & 和 | 不同於 && 和 ||
1.3 詞法分析中的「貪心法」
1.4 整數型常數
1.5 字元與字串
CHAPTER 02 語法陷阱
2.1 理解函數宣告
2.2 運算子的優先級問題
2.3 注意作為語句結束標誌的分號
2.4 switch 語句
2.5 函數呼叫
2.6 「懸掛」else 引發的問題
CHAPTER 03 語義陷阱
3.1 指標與陣列
3.2 非陣列的指標
3.3 作為參數的陣列宣告
3.4 避免「舉隅法」
3.5 空指標並非空字串
3.6 邊界計算與不對稱邊界
3.7 求值順序
3.8 運算子&&、|| 和 !
3.9 整數溢出
...