笨辦法學 C語言 (Learn C the Hard Way: Practical Exercises on the Computational Subjects You Keep Avoiding)
內容描述
這本書的目標是讓讀者掌握足夠的C語言技能,從而可以自己用C語言編寫程序或者修改別人的C語言代碼,成為一名的程序員。但這並不完全是一本講C語言編程的書,書中還重點介紹防禦性編程。本書以習題的方式引導讀者一步一步學習編程,結構非常簡單,共包括52個習題,每一個習題都重點講解一個重要的主題,多數是以代碼開始,然後解釋代碼的編寫,再運行並測試程序,給出附加任務。此外,每個習題都配套教學視頻。
本書是寫給學過編程語言的讀者的,本書有趣、簡單,並且講解方法獨特,讓讀者瞭解眾多C語言的基礎知識和C程序中常見的缺陷,在慢慢增強自己的技術能力的同時,深入瞭解怎樣破壞程序,以及怎樣讓代碼更安全。
目錄大綱
習題0準備工作1
Linux 1
Mac OS X 1
Windows 2
文本編輯器2
習題1打開塵封的編譯器4
代碼詳解4
應該看到的結果5
如何破壞程序5
附加任務6
習題2使用Makefile構建程序7
使用make 7
應該看到的結果8
如何破壞程序9
附加任務9
習題3格式化打印10
應該看到的結果10
外部研究11
如何破壞程序11
附加任務12
習題4使用調試器13
GDB小技巧13
GDB快速參考13
LLDB快速參考14
習題5記憶C語言運算符15
如何記憶15
運算符列表16
習題6記憶C語言語法19
關鍵字19
語法結構20
鼓勵的話23
告誡的話24
習題7變量和類型25
你應該看到的結果26
如何破壞程序27
附加任務27
習題8 if, else-if, else 28
應該看到的結果29
如何破壞程序29
附加任務30
習題9 while循環和布爾表達式31
應該看到的結果31
如何破壞程序32
附加任務32
習題10 switch語句33
應該看到的結果35
如何破壞程序36
附加任務36
習題11數組和字符串37
應該看到的結果38
如何破壞程序39
附加任務39
習題12數組和大小41
應該看到的結果42
如何破壞程序43
附加任務43
習題13 for循環和字符串數組44
應該看到的結果45
理解字符串數組46
如何破壞程序46
附加任務46
習題14編寫和使用函數47
應該看到的結果48
如何破壞程序49
附加任務49
習題15指針,可怕的指針50
應該看到的結果52
解釋指針53
指針的實際應用54
指針詞彙表54
指針不是數組54
如何破壞程序55
附加任務55
習題16結構體和指向結構體的指針56
應該看到的結果59
什麼是結構體59
如何破壞程序60
附加任務60
習題17內存分配:堆和棧61
應該看到的結果67
堆分配和棧分配的區別67
如何破壞程序68
附加任務69
習題18指向函數的指針70
應該看到的結果74
如何破壞程序74
附加任務75
習題19 Zed的強悍的調試宏76
C語言錯誤處理的問題76
調試宏77
使用dbg.h 79
應該看到的結果82
CPP如何擴展宏82
附加任務84
習題20調試技巧85
調試打印和GDB 85
調試策略86
附加任務87
習題21數據類型與流程控制88
可用數據類型88
類型修飾符88
類型限定符89
類型轉換89
類型大小89
可用運算符91
數學運算符92
數據運算符92
邏輯運算符92
位運算符93
布爾運算符93
賦值運算符93
可用的控制結構94
附加任務94
習題22棧、作用域和全局變量95
ex22.c和ex22.h 95
ex22_main.c 97
應該看到的結果99
作用域、棧和bug 100
如何破壞程序101
附加任務101
習題23達夫設備102
應該看到的結果105
謎底105
何必呢106
附加任務106
習題24輸入、輸出、文件107
應該看到的結果109
如何破壞程序110
I/O函數110
附加任務111
習題25變參函數112
應該看到的結果116
如何破壞程序116
附加任務116
習題26 logfind項目117
logfind的需求117
習題27創造性與防禦性編程118
創造性程序員思維模式118
防禦性程序員思維模式119
防禦性編程的八個策略119
應用八大策略120
信任輸入120
預防錯誤122
儘早出錯,公開出錯123
記錄假設124
預防優先,文檔其次124
自動化一切125
簡潔明了125
質疑126
次序不重要126
附加任務127
習題28 Makefile中級課程128
基本項目結構128
Makefile 129
開頭130
構建目標131
單元測試132
清理133
安裝133
檢查工具134
應該看到的結果134
附加任務135
習題29庫和鏈接136
動態加載共享庫137
應該看到的結果139
如何破壞程序140
附加任務141
習題30自動化測試142
為測試框架連線143
附加任務147
習題31常見未定義行為148
重要的20個未定義行為149
常見的未定義行為149
習題32雙鍊錶153
什麼是數據結構153
創建庫153
雙鍊錶154
定義155
實現156
測試160
應該看到的結果162
如何改進程序163
附加任務163
習題33鍊錶算法164
冒泡排序和歸併排序164
單元測試165
實現167
應該看到的結果170
如何改進程序170
附加任務171
習題34動態數組172
優勢和劣勢180
如何改進程序180
附加任務181
習題35排序和搜索182
基數排序和二分搜索185
C語言的聯合體186
實現188
RadixMap_find與二分搜索194
RadixMap_sort和radix_sort 194
如何改進程序195
附加任務196
習題36更安全的字符串197
為什麼C語言的字符串糟透了197
使用bstrlib 198
學習庫199
習題37散列表201
單元測試208
如何改進程序211
附加任務211
習題38散列表算法213
應該看到的結果218
如何破壞程序219
附加任務220
習題39字符串算法221
應該看到的結果228
分析結果230
附加任務231
習題40二叉搜索樹232
如何改進程序245
附加任務245
習題41 devpkg項目246
devpkg是什麼246
我們要實現的東西246
設計247
Apache Portable Runtime 247
項目佈局248
其他依賴249
Makefile文件249
源代碼文件250
DB函數251
shell函數254
命令函數259
devpkg主函數264
zui後的挑戰267
習題42棧與隊列268
應該看到的結果271
如何改進程序272
附加任務272
習題43簡單的統計引擎273
滾動標準差和平均值273
實現274
如何使用這個引擎279
附加任務280
習題44環形緩衝區281
單元測試284
應該看到的結果284
如何改進程序285
附加任務285
習題45簡單的TCP/IP客戶端286
加強Makefile 286
netclient的代碼286
應該看到的結果290
如何破壞程序291
附加任務291
習題46三元搜索樹292
優點和缺點300
如何改進程序300
附加任務301
習題47快速URL路由302
應該看到的結果305
如何改進程序305
附加任務306
習題48簡單網絡服務器307
規格說明307
習題49統計服務器308
規格說明308
習題50統計數據的路由309
習題51存儲統計數據310
軟件規格310
習題52入侵和改進你的服務器311
接下來的路312
作者介紹
作者:[美]澤德A.肖(Zed A. Shaw)譯者:王巍巍
澤德A.肖(Zed A.Shaw)是一位狂熱的吉他手、程序員和編程書作家。他的
書教會了世界各地的上百萬人如何編寫軟件。他的《笨辦法學Python》和《笨辦法學
Ruby》《》(這兩本書都已出到第3版)在全球擁有數百万讀者。他編寫的軟件大大
小小的企業都在使用。他的文章經常被眾多極客圈的人閱讀和引用。他是一位活
躍而有趣的作家,他會讓你大笑,也會讓你思考。