第0章 導讀 1
第1章 詞法“陷阱” 5
1.1 =不同于== 6
1.2 & 和 | 不同于&& 和 || 8
1.3 詞法分析中的“貪心法” 8
1.4 整型常量 10
1.5 字符與字符串 11
第2章 語法“陷阱” 15
2.1 理解函數聲明 15
2.2 運算符的優(yōu)先級問題 19
2.3 注意作為語句結束標志的分號 24
2.4 switch語句 26
2.5 函數調用 28
2.6 “懸掛”else引發(fā)的問題 29
第3章 語義“陷阱” 33
3.1 指針與數組 33
3.2 非數組的指針 39
3.3 作為參數的數組聲明 41
3.4 避免“舉隅法” 43
3.5 空指針并非空字符串 44
3.6 邊界計算與不對稱邊界 45
3.7 求值順序 57
3.8 運算符&&、|| 和 ! 59
3.9 整數溢出 61
3.10 為函數main提供返回值 62
第4章 連接 65
4.1 什么是連接器 65
4.2 聲明與定義 67
4.3 命名沖突與static修飾符 69
4.4 形參、實參與返回值 70
4.5 檢查外部類型 77
4.6 頭文件 80
第5章 庫函數 83
5.1 返回整數的getchar函數 84
5.2 更新順序文件 85
5.3 緩沖輸出與內存分配 86
5.4 使用errno檢測錯誤 88
5.5 庫函數signal 89
第6章 預處理器 93
6.1 不能忽視宏定義中的空格 94
6.2 宏并不是函數 94
6.3 宏并不是語句 99
6.4 宏并不是類型定義 101
第7章 可移植性缺陷 103
7.1 應對C語言標準變更 104
7.2 標識符名稱的限制 106
7.3 整數的大小 107
7.4 字符是有符號整數還是無符號整數 108
7.5 移位運算符 109
7.6 內存位置0 110
7.7 除法運算時發(fā)生的截斷 111
7.8 隨機數的大小 113
7.9 大小寫轉換 113
7.10 首先釋放,然后重新分配 115
7.11 可移植性問題的一個例子 116
第8章 建議與答案 121
8.1 建議 122
8.2 答案 126
附錄A PRINTF,VARARGS與STDARG 145
附錄B Koenig和Moo夫婦訪談 167