Effective C (中文版) Effective C: An Introduction to Professional C Programming

[美] 羅伯特·C. 西科德(Robert C. Seacord) 譯 王林生

  • Effective C (中文版)-preview-1
  • Effective C (中文版)-preview-2
Effective C (中文版)-preview-1

買這商品的人也買了...

商品描述

本書帶領讀者通過練習掌握編寫現代C程序的方法和技巧。全書分為11章,首先概述C語言編程的基本概念,然後詳解C語言的所有構成要素,包括變量、對象、函數、數據類型、運算符、表達式、控制流、動態內存分配、預處理器等,最後帶領讀者利用這些構成要素構建實用的系統,學習如何調試、測試、分析代碼。學透本書,你就能成為專業的C程序員,編寫出安全、高質量、可移植的C程序。

本書適合所有想編寫優秀C程序的讀者閱讀。

作者簡介

罗伯特·C. 西科德(Robert C. Seacord),C语言标准委员会专家,从头到尾参与了C语言标准C11、C17和C23的制定。罗伯特也是Linux基金会顾问,还兼任卡内基?梅隆大学计算机科学教授,并一手创办了卡内基?梅隆大学软件工程学院的安全编程项目。罗伯特发表了50余篇论文,主题涵盖软件安全、软件工程、Web系统设计、遗留系统现代化、搜索引擎、用户界面设计等,另有《C安全编码标准》《C和C++安全编码》等6部著作。

目錄大綱

第 1章 C語言入門 1

1.1 編寫第 一個C程序 1

1.1.1 編譯並運行程序 2

1.1.2 預處理器指令 3

1.1.3 main函數 3

1.1.4 檢查函數返回值

1.1.5 格式化輸出 5

1.2 編輯器和集成式開發環境 5

1.3 編譯器 7

1.3.1 GNU編譯器合集 7

1.3.2 Clang 8

1.3.3 Microsoft Visual Studio 8

1.4 可移植性 8

1.4.1 由實現定義的行為 9

1.4.2 未指定行為 9

1.4.3 未定義行為 10

1.4.4 特定區域設置行為和通用擴展 11

1.5 小結 11

第 2章 對象、函數和類型 12

2.1 對象、函數、類型和指針 12

2.2 聲明變量 13

2.2.1 交換值(初次嘗試)14

2.2.2 交換值(再次嘗試) 15

2.3 作用域 17

2.4 存儲期 18

2.5 對齊方式 19

2.6 對象類型 20

2.6.1 布爾類型 20

2.6.2 字符類型 21

2.6.3 數值類型 21

2.7 函數類型 23

2.8 派生類型 24

2.8.1 指針類型 24

2.8.2 數組 25

2.8.3 結構 27

2.8.4 聯合 27

2.9 標簽 28

2.10 類型限定符 30

2.10.1 const 30

2.10.2 volatile 31

2.10.3 restrict 32

2.11 練習 32

2.12 小結 32

第3章 算術類型 33

3.1 整數 33

3.1.1 填充和精度 33

3.1.2 頭文件 34

3.1.3 聲明整數 34

3.1.4 無符號整數 35

3.1.5 有符號整數 37

3.1.6 整數常量 41

3.2 浮點 42

3.2.1 浮點類型 42

3.2.2 浮點算術 44

3.2.3 浮點值 44

3.2.4 浮點常量 46

3.3 算術轉換 46

3.3.1 整數轉換等級 47

3.3.2 整數提升 48

3.3.3 尋常算術轉換 49

3.3.4 隱式轉換示例 50

3.3.5 安全轉換 51

3.4 小結 52

第4章 表達式和運算符 53

4.1 簡單賦值 53

4.2 求值 55

4.3 函數調用 55

4.4 遞增運算符和遞減運算符 56

4.5 運算符優先級和結合性 57

4.6 求值順序 59

4.6.1 無序求值和不定序求值 60

4.6.2 順序點 61

4.7 sizeof運算符 61

4.8 算術運算符 62

4.8.1 單目運算符+和- 62

4.8.2 邏輯否運算符 63

4.8.3 乘積運算符 63

4.8.4 累加運算符 64

4.9 按位運算符 64

4.9.1 求反運算符 65

4.9.2 移位運算符 65

4.9.3 按位與運算符 67

4.9.4 按位異或運算符 67

4.9.5 按位或運算符 68

4.10 邏輯運算符 68

4.11 轉換運算符 70

4.12 條件運算符 71

4.13 _Alignof運算符 71

4.14 關系運算符 72

4.15 復合賦值運算符 73

4.16 逗號運算符 73

4.17 指針算術 74

4.18 小結 75

第5章 控制流 76

5.1 表達式語句 76

5.2 復合語句 77

5.3 選擇語句 77

5.3.1 if語句 77

5.3.2 switch語句 80

5.4 迭代語句 83

5.4.1 while語句 83

5.4.2 do...while語句 84

5.4.3 for語句 85

5.5 跳轉語句 87

5.5.1 goto語句 87

5.5.2 continue語句 89

5.5.3 break語句 89

5.5.4 return語句 90

5.6 練習 91

5.7 小結 91

第6章 動態分配內存 92

6.1 存儲期 92

6.1.1 堆和內存管理器 93

6.1.2 什麽時候使用動態分配內存 93

6.2 內存管理函數 94

6.2.1 malloc函數 94

6.2.2 aligned_alloc函數 96

6.2.3 calloc函數 97

6.2.4 realloc函數 97

6.2.5 reallocarray函數 99

6.2.6 free函數 100

6.3 內存狀態 101

6.4 柔性數組成員 102

6.5 其他的動態分配內存 103

6.5.1 alloca函數 103

6.5.2 變長數組 104

6.6 調試存儲分配問題 108

6.6.1 dmalloc 108

6.6.2 安全關鍵型系統 110

6.7 練習 110

6.8 小結 110

第7章 字符和字符串 111

7.1 字符 111

7.1.1 ASCII 112

7.1.2 Unicode 112

7.1.3 源字符集和執行字符集 113

7.1.4 數據類型 114

7.1.5 字符常量 116

7.1.6 轉義序列 116

7.1.7 Linux 117

7.1.8 Windows 118

7.1.9 字符轉換 119

7.2 字符串 123

7.3 字符串處理函數 125

7.3.1 126

7.3.2 附錄K:邊界檢查接口 132

7.3.3 POSIX 134

7.3.4 Microsoft 135

7.4 小結 136

第8章 輸入/輸出 137

8.1 標準I/O流 137

8.1.1 流緩沖 138

8.1.2 預定義流 138

8.1.3 流傾向 140

8.1.4 文本流和二進制流 140

8.2 打開文件和創建文件 140

8.2.1 fopen函數 140

8.2.2 POSIX 的open函數 142

8.3 關閉文件 144

8.3.1 fclose函數 144

8.3.2 POSIX的close函數 145

8.4 讀寫字符和行 145

8.5 流沖洗 147

8.6 設置文件內部位置 148

8.7 刪除文件和重命名文件 150

8.8 使用臨時文件 151

8.9 讀取格式化文本流 151

8.10 讀寫二進制流 154

8.11 小結 157

第9章 預處理器 159

9.1 編譯過程 159

9.2 文件包含 160

9.3 條件包含 161

9.3.1 生成錯誤 162

9.3.2 頭文件保護 163

9.4 宏定義 164

9.4.1 宏替換 167

9.4.2 泛型宏 169

9.4.3 預定義宏 169

9.5 小結 170

第 10章 程序結構 171

10.1 組件化原則 171

10.1.1 耦合和內聚 171

10.1.2 代碼復用 172

10.1.3 數據抽象 172

10.1.4 不透明類型 173

10.2 可執行文件 174

10.3 鏈接 175

10.4 組織一個簡單的程序 177

10.5 構建代碼 181

10.6 小結 183

第 11章 調試、測試和分析 184

11.1 斷言 184

11.1.1 靜態斷言 184

11.1.2 運行期斷言 186

11.2 編譯器設置和選項 188

11.2.1 GCC和Clang 188

11.2.2 Visual C++ 191

11.3 調試 192

11.4 單元測試 195

11.5 靜態分析 198

11.6 動態分析 200

11.7 練習 204

11.8 小結 205

參考文獻 206