發表於2024-11-26
(1)基於C11標準,涵蓋精準語法、高級特性、主流C語言編譯器支持,配閤大量示例與講解(How-Why),掌握C魔法精髓。
(2)C語言與匯編語言重度用戶與擁躉者撰寫,10餘年開發經驗結晶,講究透徹而實用,字字珠璣。
閱讀建議:本書從基礎到高級,全麵而深入,不同層次的讀者可選擇適閤自己的章節閱讀,參見前言“如何閱讀本書”模塊。
預備知識篇(第1~3章),為初級讀者提供計算機理論知識和相關概念,如編程模式、主流開源編譯器,以及搭建C編程環境的方法。
基礎語法篇(第4~11章),學習C語言的基石——基本語法與使用講解,涵蓋基本元素、基本數據類型、用戶自定義類型、數組和指針(難點)、控製流語句、函數。
高級語法篇(第12~16),講述瞭C11編程的一些高級特性,進階之用。涵蓋:
q目前所支持的所有預處理器特性;
q編譯上下文作用域、名字空間、連接屬性;
qC11標準支持的類型限定符的標準用法與注意事項;
q深刻解讀C語言語法體係的核心——類型係統;
qC11標準中錶達式及其計算優先級,以及“左值”;
q主流編譯器所采用的函數調用約定;
q主流C語言編譯工具構建靜態庫/動態庫的方法與實踐。
語法擴展篇(第17~19章)講述瞭GCC與Clang編譯器對C語言的擴展,以及C語言的設計理念、未來C語言新添與排除特性。需要對底層交互與開發深入瞭解的讀者大有裨益。
項目實踐篇(第20~21章),UTF-8與UTF-16編碼程序編寫,基於控製颱的計算器程序。精巧而知識點全麵。
陳軼 網名zenny_chen,C語言與匯編語言重度用戶與擁躉者,安沃傳媒移動客戶端及HTML5技術研發總監、首席科學傢。多年高性能計算、嵌入式係統與移動互聯網實踐經驗,深諳實時操作係統內核、設備驅動研發,對多媒體高性能計算編程、移動端開發以及各種處理器架構如數傢珍,同時精通計算機底層基礎技術與各種編程語言,尤其精通C/C++,Java,Objective-C以及Swift!現任OpenGPU社區“並行計算討論區”與“高級計算機體係結構討論區”兩大版塊的版主,以及CocoaChina社區的Swift編程語言討論區與代碼例子區的版主。《OpenCL異構並行計算:原理、機製與優化實踐》作者之一,App Store以及Mac App Store中CPU Dasher的作者,曾任理光上海圖像技術有限公司的高級體係結構工程師。
前言
第一篇 預備知識篇
第1章C魔法概覽 /2
1.1 例說編程語言 2
1.2 用C語言編程的基本注意事項 6
1.3 主流C語言編譯器介紹 8
1.4 關於GNU規範的語法擴展 10
1.5 用C語言構建一個可執行程序的流程 11
1.6 本章小結 12
第2章學習C語言的預備知識 /14
2.1 計算機體係結構簡介 14
2.1.1 貯存器 15
2.1.2 存儲器 15
2.1.3 寄存器 16
2.1.4 計算單元 16
2.1.5 程序執行流程 16
2.2 整數在計算機中的錶示 17
2.2.1 原碼錶示法 18
2.2.2 補碼錶示法 19
2.2.3 八進製數與十六進製數 20
2.3 浮點數在計算機中的錶示 22
2.4 地址與字節對齊 24
2.5 字符編碼 25
2.6 大端與小端 28
2.7 按位邏輯運算 28
2.8 移位操作 30
2.8.1 算術左移與邏輯左移 30
2.8.2 邏輯右移 30
2.8.3 算術右移 31
2.8.4 循環右移 32
2.9 本章小結 32
第3章C語言編程的環境搭建 /33
3.1 Windows操作係統下搭建C語言編程環境 33
3.1.1 安裝Visual Studio Community 2017 34
3.1.2 安裝MinGW編譯器 40
3.1.3 安裝LLVM Clang編譯器 43
3.2 macOS係統下搭建C語言編程環境 45
3.3 本章小結 51
第二篇 基礎語法篇
第4章C語言中的基本元素 /54
4.1 C語言中的字符集 55
4.2 C語言中的token 56
4.2.1 C語言中的標識符 57
4.2.2 C語言中的關鍵字 58
4.2.3 C語言中的常量與字符串字麵量 60
4.2.4 C語言中的標點符號 60
4.3 關於C語言中的“對象” 62
4.4 C語言中的“副作用” 63
4.5 C語言標準庫中的printf函數 63
4.6 本章小結 65
第5章基本數據類型 /66
5.1 整數類型 66
5.1.1 int類型 67
5.1.2 short類型 68
5.1.3 long類型 69
5.1.4 long long類型 71
5.1.5 布爾類型 72
5.1.6 字符類型 73
5.1.7 寬字符以及Unicode字符類型 77
5.1.8 size_t與ptrdiff_t類型 81
5.1.9 C語言中的標準整數類型 82
5.2 浮點類型 84
5.3 數據精度與類型轉換 86
5.3.1 整數晉升 87
5.3.2 帶符號與無符號整數之間的轉換 87
5.3.3 浮點數與浮點數的轉換以及浮點數與整數之間的轉換 90
5.4 C語言基本運算操作符 92
5.4.1 加、減、乘、除與求模運算操作符 92
5.4.2 按位邏輯操作符 93
5.4.3 自增、自減操作符 94
5.4.4 關係操作符、相等性操作符與邏輯操作符 95
5.4.5 移位操作符 96
5.4.6 圓括號操作符 97
5.5 sizeof操作符 98
5.6 投射操作符 99
5.7 本章小結 101
第6章用戶自定義類型 /102
6.1 枚舉類型 102
6.2 結構體類型 105
6.2.1 結構體概述 105
6.2.2 用結構體創建對象並訪問其成員 107
6.2.3 結構體復閤字麵量 110
6.3 聯閤體類型 113
6.4 位域 117
6.4.1 位域的一般特性 118
6.4.2 位域成員的存放與布局 120
6.4.3 匿名位域 122
6.4.4 位域使用示例 124
6.5 字節對齊與字節填充 125
6.5.1 _Alignof操作符 125
6.5.2 _Alignas對齊說明符 126
6.5.3 結構體成員的字節對齊與字節填充 129
6.6 復數類型 133
6.7 本章小結 135
第7章C語言的數組與指針 /136
7.1 一維數組 136
7.2 多維數組 141
7.3 變長數組 145
7.4 一級指針與對象地址 147
7.4.1 地址與指針的基本概念 148
7.4.2 訪問指針對象所指對象的內容 149
7.4.3 指針對象的其他操作 150
7.5 多級指針 153
7.6 指嚮用戶自定義類型的指針 156
7.7 指針與數組的關係 159
7.8 指嚮數組的指針 162
7.9 void類型、指嚮void類型的指針與空指針 165
7.10 字符數組與字符串字麵量 167
7.11 完整與不完整類型 170
7.12 靈活的數組成員 171
7.13 本章小結 173
第8章C語言的控製流語句 /174
8.1 逗號錶達式 174
8.2 條件錶達式 176
8.3 if-else語句 176
8.4 switch-case語句 179
8.5 while與do-while迭代語句 182
8.6 for迭代語句 187
8.7 goto語句 189
8.8 本章小結 192
第9章C語言的函數 /193
9.1 函數的聲明與定義 194
9.2 函數調用與實現 196
9.2.1 函數調用的順序點 197
9.2.2 函數的棧空間 200
9.2.3 函數的參數傳遞與返迴 201
9.2.4 通過形參修改實參的值 204
9.3 數組類型作為函數形參 205
9.4 帶有不定參數類型及個數的函數聲明與調用 209
9.5 函數的遞歸調用 212
9.6 內聯函數 218
9.7 函數的返迴類型與無返迴函數 221
9.8 指嚮函數的指針 223
9.9 C語言中的主函數main 226
9.10 函數與函數調用作為sizeof操作符 228
9.11 本章小結 229
第10章C語言預處理器 /230
10.1 宏定義 231
10.1.1 宏的基本使用 232
10.1.2 宏定義中的#操作符 234
10.1.3 宏定義中的##操作符 236
10.1.4 宏替換 238
10.1.5 可變參數的宏定義 240
10.2 C語言中預定義的宏 243
10.2.1 C語言強製要求的預定義宏 243
10.2.2 環境宏 244
10.2.3 條件特徵宏
為什麼要寫這本書本人在2001年上瞭大學本科,讀計算機科學與技術專業。在第一年的上半學期,對計算機編程還沒什麼感覺。但是就在考“C語言程序設計”這門專業課的前一個月,感覺這門課學瞭那麼久幾乎什麼都不會,可把我急壞瞭。然後就在這短短一個月的時間裏又是看書,又是上機實驗,終於考瞭70多分,算是過關瞭……不過奇怪的是在考試結束後,就發現自己對編程有瞭感情。到瞭大二,我們上“數據結構”所使用的教材是基於C++編程語言的,因為之前沒學過C++語言,所以隻能自學。而在這個過程中,我發現自己對編程更加熱愛。在上完大三之後,我在暑假裏又把之前的C語言重新鞏固一番。有瞭計算機組成、操作係統、匯編語言、數據結構等知識積澱之後再去看C語言編程就感覺容易多瞭。我也是由此喜歡上瞭C編程語言。
10年之後,發現國內市麵上很多C語言參考書仍然顯得非常陳舊。不僅基於古老的C89/90標準,而且還在用VisualC++6.0這種既收費又老舊的開發環境教學生。對於比較新的C99標準的講解屈指可數,更鮮有針對最新的C11標準的書籍。齣於對C語言的熱愛,在此熱切希望能把最新標準的C語言奉獻給各位讀者,也想把C語言的方方麵麵講透並且能講得通俗易懂,方便讀者去思考實踐,所以這也是我寫這本書的主要原因。當各位閱讀完本書之後,會發現C語言竟然如此強大!而且在大部分時候,尤其是我們想集中注意力解決某個特定問題的時候,使用C語言要比用其他一些基於麵嚮對象的類C編程語言(比如C++、Java等)要直觀得多!
本書之所以叫“C語言編程魔法書”,是因為像“寶典”、“聖經”之類的詞已經被用濫瞭。再者,C語言本身就擁有極其強大的魔力,你能用它做幾乎所有的事情。而且幾乎每一個C語言編譯器都能內聯匯編語言,或者與C++、Objective-C直接兼容,而對於像Java、C#、Python等許多編程語言也有相應的接口。所以,我認為C語言在計算機編程語言領域中就好比數學在自然科學中的地位和作用,它是很多編程語言的基礎,而且很多編程語言的編譯器或解釋器也都是基於C語言來寫的。
就在2015年2月,Khronos標準組織發布瞭最具現代化的圖形API——Vulkan,其主機端接口用的API是純C語言。此外,像OpenGL、OpenCL、OpenAL、OpenVG等開放標準都基於純C語言。此外,最近10年來TIOBE每月的編程語言排名,C語言排名始終能進前兩名,也能說明它的使用範圍之廣,而且許多開源項目也多多少少會使用C語言來編寫。況且學瞭C語言之後,再學習C++、Java等麵嚮對象編程語言也會輕鬆很多。尤其像C++和Objective-C,沒有C語言基礎是完全不行的。所以個人十分推薦計算機係的大學生將C語言作為自己的計算機入門編程語言!
本書特色從技術層麵上講,本書介紹瞭C語言的最新標準,即ISO/IEC9899:2011。同時,也介紹瞭主流開源C語言編譯器GCC與Clang對標準C語言語法的擴充。而且所基於的編譯器和開發環境也是比較新的VisualStudioCommunity2017、GCC5,以及Clang3.8(AppleLLVM8.0,基於Xcode8)。
從適閤讀者閱讀和掌握知識的結構安排上講,本書分為“預備知識篇”、“基礎語法篇”、“高級語法篇”,以及“語法擴展篇”,還有最後的“項目實踐篇”。從基礎到高級,循序漸進地為讀者描述C語言編程方法。本書尤其著重C語言標準語法上的精確描述,通過許多代碼片段給讀者介紹各種C語言語法知識,並且能反映齣C語言的靈活性以及在使用上的約束。
本書推崇讀者使用閤法免費的C語言編譯器以及集成開發環境,希望讀者能有正確的軟件版權意識,這樣纔能更好地為我國軟件事業增添光彩,為打造良好的應用市場以及生態環境作齣貢獻。因此,本書主要選擇使用GCC、Clang這兩個主流開源免費的C語言編譯器,而集成開發環境(IDE)則采用VisualStudioCommunity、Eclipse、Xcode這三個常用的免費開發工具,其中,VisualStudioCommunity不是開源的,而Xcode則是部分開源的。
本書雖然會講解整個C編程語言,涉及瞭幾乎所有的語法點,但是考慮到本書讀者可能是初學C語言,且沒有多少計算機專業知識,所以本書措辭會盡量通俗,而不過於追求學術化。某些描述可能會不太嚴謹,但對於本書所用到的GCC、Clang這兩大主流編譯器而言將完全適用。另外,考慮到不少讀者從事嵌入式係統開發工作,所以對於C語言標準中齣現的所謂“由實現定義的”場閤會盡量區分情況分彆闡明。本書的最終的目的就是讓讀者至少能熟練掌握C語言編程,能將它靈活地運用於實際工程中。
讀者對象嵌入式係統開發者移動或桌麵客戶端應用程序開發者服務器端應用程序開發者係統架構師計算機、電子工程、通信專業的大學生其他對C語言編程感興趣的人員如何閱讀本書本書一共分為四大篇。
預備知識篇(第1~3章),簡單描述C語言的概況、學習C語言的預備知識,以及在Windows、macOS和Linux三大桌麵環境下搭建編寫C環境的方法。
第1章C魔法概覽。主要介紹C語言的來曆和演化,用它編寫代碼的編程模式以及我們可以用於實踐的主流C語言編譯器。
第2章學習C語言的預備知識。這一章主要為不太熟悉計算機係統的讀者提供一些基礎的計算機理論知識和相關概念,比如整數與浮點數在計算機中的錶示方法、字符編碼格式、按位邏輯計算、移位操作等。
第3章C語言編程的環境搭建。這一章主要介紹瞭Windows、macOS以及Linux係統下如何安裝並使用主流編譯器與集成開發環境。
基礎語法篇(第4~11章)講解C語言的基本語法。這是C語言程序員必須掌握的。
第4章C語言中的基本元素。這一章描述瞭C語言中常用字符集以及閤法token的構成。此外還介紹瞭標識符、關鍵字以及標點符號的使用說明。
第5章基本數據類型。這一章介紹瞭整數類型、字符類型、浮點類型數據的錶示,以及它們之間的類型轉換。此外還描述瞭對於這些基本數據類型的算術邏輯操作、投射操作以及通過sizeof操作符獲取數據類型與對象相應的字節數。
第6章用戶自定義類型。這一章描述瞭枚舉、結構體以及聯閤體這三種用戶自定義類型,並介紹瞭它們的特性以及各種使用方式。
第7章C語言的數組和指針。這一章十分關鍵,也是C語言的語法難點。這裏詳細介紹瞭C語言中一維數組與多維數組的錶示以及如何對它們進行操作,然後介紹瞭C語言中的指針類型,詳細闡述瞭指針類型的使用技巧以及需要注意的事項。
第8章C語言的控製流語句。這一章介紹瞭C語言的條件語句、選擇語句以及循環等控製流語句。
第9章C語言的函數。這一章介紹瞭C語言中的函數概念,包括C語言函數的聲明及定義,還有C函數的調用。此外還介紹瞭C語言函數標識符作為錶達式時的類型。
第10章C語言的預處理器。這章包含瞭目前C11標準中所支持的所有預處理器特性,包括宏定義、預處理條件、預編譯指示符與操作符以及C代碼的注釋。
第11章C語言的編譯上下文。這一章介紹瞭C語言對象與函數的作用域和名字空間。詳細介紹瞭C語言中的四大作用域以及在不同作用域中的對象的生命周期。此外還介紹瞭對象與函數的連接屬性,包括外部連接和內部連接。
高級語法篇(第12~16章)講述C語言的一些高級特性。這一部分內容不需要C語言程序員必須掌握,但需要對此有個大概瞭解。
第12章C語言中的類型限定符。該章介紹瞭C11標準中支持的const、volatile、restrict與_Atomic這四種限定符。詳細說明瞭限定符用於修飾含有指針的對象時,在*號的不同位置所起到的不同作用。然後分彆介紹這四種限定符的具體含義。
第13章C語言中的類型係統。這一章把C語言語法體係中的整個類型係統再梳理瞭一遍。這一章介紹瞭對於一些復雜類型的對象如何去剖析、理解,然後自己如何去聲明自己想要的復雜類型的對象和函數。這一章所描述的其實是整個C語言語法體係的核心,如果大傢能掌握的話,那麼基本就算是真正掌握C語言瞭。其實,對於任一強類型的編程語言而言,其係統類型總是扮演著十分重要的角色,我們學習此類語言都需要透徹理解其整個類型係統。
第14章C11標準中的錶達式、左值與求值順序。該章先介紹瞭C11標準中各類錶達式以及它們的計算優先級。然後介紹瞭“左值”這個概念,並講解瞭錶達式之間的求值順序。
第15章函數調用約定與ABI。該章與C語言標準並無太大關係,但卻與實際項目開發有關。這一章介紹瞭主流C語言編譯器所采用的函數調用約定,然後詳細描述瞭函數調用的過程,包括參數傳遞和返迴值的具體處理。該章對嵌入式係統開發者以及需要將C語言與匯編語言進行交互使用的高性能計算開發者而言,將大為有用。
第16章創建動態庫與靜態庫。這一章介紹瞭用主流C語言編譯工具構建靜態庫以及動態庫的方法,並介紹如何使用這些庫文件。
語法擴展篇(第17~19章)講述瞭GCC與Clang編譯器對C語言的擴展。
第17章GCC對C11標準的擴展。該章先簡單介紹GNU語法擴展,然後介紹GCC編譯器中常用的擴展語法。
第18章Clang編譯器對C11標準的擴展。該章介紹瞭Clang編譯器對C11標準的語法擴展。最後還介紹瞭Apple開源的GrandCentralDispatch庫的簡單使用。
第19章對C語言的未來展望。該章主要介紹瞭C語言的設計理念以及當前C語言標準委員會的工作組正在為C語言新增的內容,還談到瞭哪些特性不會被添加到C語言中去。
項目實踐篇(第20~21章),這裏通過兩個實際的C語言項目來介紹我們如何利用C語言來創作齣自己的程序。
第20章描述瞭UTF-8編碼格式的字符串與UTF-16編碼格式的字符串進行相互轉換的例子。
第21章介紹一個看似簡單而功能很豐富的基於控製颱的計算器程序。
C語言編程魔法書:基於C11標準 下載 mobi pdf epub txt 電子書 格式 2024
C語言編程魔法書:基於C11標準 下載 mobi epub pdf 電子書書有點薄,不過內容應該還可以,畢竟機械工業齣版社的書都不是孬種,快遞也很快。
評分我以前學的數據結構有些差彆 這裏增加瞭算法分析對學習有很大的幫助
評分數據結構與算法書,隻不過是c語言的。這本雖然有塑封,但是磨損比c++primer嚴重,內容講的也比較高級,比 大話數據結構 要難懂一點。新手的話還是推薦程傑的大話數據結構,雖然錯誤不少
評分紙張質量可以,應該是正版,就是氣味稍重,比一起買的另外兩本重。
評分還沒有看,彆人推薦我看得,應該還不錯吧。
評分不錯不錯,好書好書,慢慢看慢慢看
評分東西不錯,雖然還沒開始看,價格也不貴,肯定是正品。
評分嗯,這本書很不錯,慢慢看,推薦學完C語言後再看
評分書質量很好,服務周到。活動期間買的,物美價廉,以後圖書都在京東買瞭!
C語言編程魔法書:基於C11標準 mobi epub pdf txt 電子書 格式下載 2024