從缺陷中學習C/C++

從缺陷中學習C/C++

《從缺陷中學習C/C++》是2013年人民郵電出版社出版的圖書。

基本介紹

  • 書名:從缺陷中學習C/C++
  • ISBN:9787115321596
  • 頁數:166
  • 出版社:人民郵電出版社
  • 出版時間:2013-9-1
內容介紹,讀者對象,目錄,

內容介紹

C/C++是廣泛用於系統和套用軟體開發的語言,也是使用最為廣泛的程式語言。C/C++易學難用,尤其C++,經過20多年的發展,已經變得非常複雜,給編程人員帶來了很大的挑戰。那么如何在工程項目中用好C/C++語言、如何繞過Bug構建穩定可靠的生產系統、如何以最快速度全面了解C/C++編程中的陷阱和障礙,編寫出健壯可靠的代碼呢?《從缺陷中學習C/C++》將通過102個案例,幫助程式設計師儘快從新手成長為專家。案例涵蓋基礎問題、編譯問題、庫函式問題、檔案處理、類和對象、記憶體使用、多執行緒問題、性能問題等。讀者每掌握一個案例就掌握了一個或幾個知識點,就能避免一類問題。由於是從大量編程中總結出來的具體Bug案例中學習,這種學習方式更直接,讓人印象更深刻。《從缺陷中學習C/C++》將為你成為C和C++高手、編寫出完美的程式助一臂之力。

讀者對象

《從缺陷中學習C/C++》適合程式設計師、測試人員以及C和C++初學者使用,也可以作為各大專院校和培訓學校的教學用書。

目錄

第1章 基礎問題 1
1.1 運算符優先權引起的問題 1
1.2 不加括弧的宏定義引起的錯誤 2
1.3 污染環境的宏定義 3
1.4 多語句宏定義使用錯誤 4
1.5 char轉為int時高位符號擴展的問題 6
1.6 int轉為char時的數據損失 7
1.7 非法的數組下標 9
1.8 有符號int與無符號int比較的後果 10
1.9 有符號的困惑 11
1.10 整除的精度問題 13
1.11 浮點數比較的精度問題 14
1.12 最小負整數取相反數溢出 15
1.13 臨時變數溢出 16
1.14 size_t導致的死循環 17
1.15 誤用short引起緩衝區溢出 18
1.16 區分continue和return 20
1.17 指針常量和常量指針的區別 21
1.18 字元數組和指針不總是等價的 23
1.19 結構體成員變數初始化的隱患 24
1.20 返回值非void的函式沒有返回值 25
1.21 cin>>和getline混用導致的奇怪問題 27
1.22 小結 29
第2章 編譯問題 30
2.1 動態程式庫載入錯誤版本 30
2.2 相同名稱靜態庫的連結順序 32
2.3 使用命名空間來區分不同cpp中的同名類 33
2.4 C++模板編譯時依賴名稱查找 34
2.5 違背ODR原則可能會帶來的意想不到的問題 36
2.6 變數共用記憶體時使用O2最佳化編譯 38
2.7 小結 40
第3章 庫函式問題 41
3.1 sprintf函式引起的緩衝區溢出 41
3.2 snprintf函式format參數的問題 43
3.3 錯誤使用snprintf函式返回值 44
3.4 字元串複製不完整 45
3.5 string類的c_str方法使用不當 46
3.6 string類的“[]”操作符使用不正確 48
3.7 不正確的字元串比較 49
3.8 strncpy函式沒有複製結束符 51
3.9 調用memcpy函式前未初始化緩衝區 52
3.10 誤用sizeof操作符取字元串長度 53
3.11 string類find函式返回值判定 54
3.12 stringstream的清空 56
3.13 調用strptime函式前需初始化tm 57
3.14 使用feof函式的陷阱 59
3.15 for循環中調用vector容器insert函式 60
3.16 multiset容器erase函式的誤用 62
3.17 慎用容器類erase函式的返回值 63
3.18 for循環中調用vector容器erase函式 65
3.19 getopt函式參數問題 67
3.20 不用errno判斷系統調用是否成功 69
3.21 strcat函式造成的段錯誤 70
3.22 危險的strdup函式 71
3.23 小結 73
第4章 檔案處理 74
4.1 程式異常退出時未關閉已打開檔案 74
4.2 目錄打開後未關閉 75
4.3 寫檔案沒有調用fflush 76
4.4 讀檔案fread的返回值不能忽略 77
4.5 getline()使用不當導致的死循環 78
4.6 未重置流狀態導致讀檔案錯誤 80
4.7 小結 82
第5章 類和對象 83
5.1 對象的淺複製 83
5.2 構造函式中的操作符重載 85
5.3 拷貝構造函式不能模板化 87
5.4 析構函式未捕獲異常引發coredump 89
5.5 構造函式中拋出異常引起記憶體泄露 91
5.6 多態性未生效 93
5.7 基類成員函式被隱藏 94
5.8 匿名對象引起的記憶體泄露 96
5.9 基類非虛析構函式引發記憶體泄露 97
5.10 刪除void*指針引發記憶體泄露 100
5.11 STL容器不會自動釋放指針指向的對象 102
5.12 靜態成員類內初始化 104
5.13 union作為類的成員時需要構造函式 105
5.14 成員函式尾部缺失const標註 107
5.15 使用memset初始化class 109
5.16 dynamic_cast轉換失敗返回NULL 110
5.17 小結 113
第6章 記憶體使用 114
6.1 數組越界 114
6.2 數組定義和值初始化形式混淆 115
6.3 數組傳參時的sizeof 116
6.4 臨時對象的生存期 117
6.5 變數的作用域 119
6.6 指針變數的傳值和傳址 120
6.7 指針賦值和指針賦址的混淆 121
6.8 指針釋放後再次使用 122
6.9 重複申請記憶體未釋放 124
6.10 delete與delete[]的區別 126
6.11 函式中途退出忘記釋放記憶體 126
6.12 二維數組的記憶體泄露 127
6.13 臨時變數記憶體不能返回 128
6.14 正確使用引用參數和引用返回值 129
6.15 試圖產生的指針很可能不存在 130
6.16 結構體成員記憶體對齊問題 131
6.17 String對象何時需delete 134
6.18 小結 135
第7章 多執行緒問題 136
7.1 局部靜態變數非執行緒安全 136
7.2 string類append操作非執行緒安全 138
7.3 中途退出造成的執行緒阻塞 142
7.4 結構體位域成員執行緒安全問題 144
7.5 多執行緒寫檔案引發內容被覆蓋 146
7.6 執行緒未join引起的記憶體泄露 148
7.7 小結 150
第8章 性能問題 151
8.1 strlen用作循環條件影響性能 151
8.2 STL容器list使用時忌頻繁調用size() 152
8.3 誤用clear回收vector記憶體 154
8.4 calloc在glibc高版本下性能劣於低版本下 156
8.5 小結 157
第9章 C/C++編程中其他問題 158
9.1 中文截斷成亂碼 158
9.2 不必要的類型轉換 159
9.3 不確定的函式參數賦值 161
9.4 epoll邊沿觸發模式下的陷阱 163
9.5 小結 166

相關詞條

熱門詞條

聯絡我們