選擇C語言的理由
在過去40多年里,C語言已成為最重要、最流行的編程語言之一,它的成長歸功于使用過的人都對它很滿意,過去20多年里,雖然許多人都從C語言轉而使用其他編程語言(如,C++、Objective C、Java等),但是C語言仍憑借自身實力在眾多語言中脫穎而出,在學習C語言的程序中,會發現它的許多優點(見圖1.1),下面,我們來看看其中較為突出的幾點,

圖1.1 C語言的優點
1 設計特性
C是一門流行的語言,融合了計算機科學理論和實踐的控制特性,C語言的設計理念讓用戶能輕松地完成自頂向下的規劃、結構化編程和模塊化設計,因此,用C語言撰寫的程式更易懂、更可靠,
2 高效性
C是高效的語言,在設計上,它充分利用了當前計算機的優勢,因此C程式相對更緊湊,而且運行速度很快,實際上,C語言具有通常是匯編語言才具有的微調控制能力(匯編語言是為特殊的中央處理單元設計的一系列內部指令,使用助記符來表示;不同的CPU系列使用不同的匯編語言),可以根據具體情況微調程式以獲得最大運行速度或最有效地使用記憶體,
3 可移植性
C是可移植的語言,這意味著,在一種系統中撰寫的C程式稍作修改或不修改就能在其他系統運行,如需修改,也只需簡單更改主程式頭檔案中的少許項即可,大部分語言都希望成為可移植語言,但是,如果經歷過把IBM PC BASIC程式轉換成蘋果BASIC(兩者是近親),或者在UNIX系統中運行IBM大型機的FORTRAN程式的人都知道,移植是最麻煩的事,C語言是可移植方面的佼佼者,從8位微處理器到克雷超級計算機,許多計算機體系結構都可以使用C編譯器(C編譯器是把C代碼轉換成計算機內部指令的程式),但是要注意,程式中針對特殊硬體設備(如,顯示監視器)或作業系統特殊功能(如,Windows 8或OS X)撰寫的部分,通常是不可移植的,
由于C語言與UNIX關系密切,UNIX系統通常會將C編譯器作為軟體包的一部分,安裝Linux時,通常也會安裝C編譯器,供個人計算機使用的C編譯器很多,運行各種版本的Windows和Macintosh(即,Mac)的PC都能找到合適的C編譯器,因此,無論是使用家庭計算機、專業作業站,還是大型機,都能找到針對特定系統的C編譯器,
4 強大而靈活
C語言功能強大且靈活(計算機領域經常使用這兩個詞),例如,功能強大且靈活的UNIX作業系統,大部分是用C語言寫的;其他語言(如,FORTRAN、Perl、Python、Pascal、LISP、Logo、BASIC)的許多編譯器和解釋器都是用C語言撰寫的,因此,在UNIX機上使用FORTRAN時,最終是由C程式生成最后的可執行程式,C程式可以用于解決物理學和工程學的問題,甚至可用于制作電影的影片特效,
5 面向程式員
C語言是為了滿足程式員的需求而設計的,程式員利用C可以訪問硬體、操控記憶體中的位,C語言有豐富的運算子,能讓程式員簡潔地表達自己的意圖,C沒有Pascal嚴謹,但是卻比C++的限制多,這樣的靈活性既是優點也是缺點,優點是,許多任務用C來處理都非常簡潔(如,轉換資料的格式);缺點是,你可能會犯一些莫名其妙的錯誤,這些錯誤不可能在其他語言中出現,C語言在提供更多自由的同時,也讓使用者承擔了更大的責任,
另外,大多數C實作都有一個大型的庫,包含眾多有用的C函式,這些函式用于處理程式員經常需要解決的問題,
6 缺點
人無完人,金無足赤,C語言也有一些缺點,例如,前面提到的,要享受用C語言自由編程的樂趣,就必須承擔更多的責任,特別是,C語言使用指標,而涉及指標的編程錯誤往往難以察覺,有句話說的好:想擁有自由就必須時刻保持警惕,
C語言緊湊簡潔,結合了大量的運算子,正因如此,我們也可以撰寫出讓人極其費解的代碼,雖然沒必要強迫自己撰寫晦澀的代碼,但是有興趣寫寫也無妨,試問,除C語言外還為哪種語言舉辦過年度混亂代碼大賽[1]?
瑕不掩瑜,C語言的優點比缺點多很多,我們不想在這里多費筆墨,還是來聊聊C語言的其他話題,
C語言的應用范圍

使用C語言的7個步驟
C是編譯型語言,如果之前使用過編譯型語言(如,Pascal或FORTRAN),就會很熟悉組建C程式的幾個基本步驟,但是,如果以前使用的是解釋型語言(如,BASIC)或面向圖形界面語言(如,Visual Basic),或者甚至沒接觸過任何編程語言,就有必要學習如何編譯,別擔心,這并不復雜,首先,為了讓讀者對編程有大概的了解,我們把撰寫C程式的程序分解成7個步驟(見圖1.3),注意,這是理想狀態,在實際的使用程序中,尤其是在較大型的專案中,可能要做一些重復的作業,根據下一個步驟的情況來調整或改進上一個步驟,

圖1.3 編程的7個步驟
1 第1步:定義程式的目標
在動手寫程式之前,要在腦中有清晰的思路,想要程式去做什么首先自己要明確自己想做什么,思考你的程式需要哪些資訊,要進行哪些計算和控制,以及程式應該要報告什么資訊,在這一步驟中,不涉及具體的計算機語言,應該用一般術語來描述問題,
2 第2步:設計程式
對程式應該完成什么任務有概念性的認識后,就應該考慮如何用程式來完成它,例如,用戶界面應該是怎樣的?如何組織程式?目標用戶是誰?準備花多長時間來完成這個程式?
除此之外,還要決定在程式(還可能是輔助檔案)中如何表示資料,以及用什么方法處理資料,學習C語言之初,遇到的問題都很簡單,沒什么可選的,但是,隨著要處理的情況越來越復雜,需要決策和考慮的方面也越來越多,通常,選擇一個合適的方式表示資訊可以更容易地設計程式和處理資料,
再次強調,應該用一般術語來描述問題,而不是用具體的代碼,但是,你的某些決策可能取決于語言的特性,例如,在資料表示方面,C的程式員就比Pascal的程式員有更多選擇,
3 第3步:撰寫代碼
設計好程式后,就可以撰寫代碼來實作它,也就是說,把你設計的程式翻譯成C語言,這里是真正需要使用C語言的地方,可以把思路寫在紙上,但是最侄訓是要把代碼輸入計算機,這個程序的機制取決于編程環境,我們稍后會詳細介紹一些常見的環境,一般而言,使用文本編輯器創建源代碼檔案,該檔案中內容就是你翻譯的C語言代碼,程式清單1.1是一個C源代碼的示例,
程式清單1.1 C源代碼示例
#include <stdio.h>
int main(void)
{
int dogs;
printf("How many dogs do you have?\n");
scanf("%d", &dogs);
printf("So you have %d dog(s)!\n", dogs);
return 0;
}
在這一步驟中,應該給自己撰寫的程式添加文字注釋,最簡單的方式是使用C的注釋工具在源代碼中加入對代碼的解釋,第2章將詳細介紹如何在代碼中添加注釋,
4 第4步:編譯
接下來的這一步是編譯源代碼,再次提醒讀者注意,編譯的細節取決于編程的環境,我們稍后馬上介紹一些常見的編程環境,現在,先從概念的角度講解編譯發生了什么事情,
前面介紹過,編譯器是把源代碼轉換成可執行代碼的程式,可執行代碼是用計算機的機器語言表示的代碼,這種語言由數字碼表示的指令組成,如前所述,不同的計算機使用不同的機器語言方案,C編譯器負責把C代碼翻譯成特定的機器語言,此外,C編譯器還將源代碼與C庫(庫中包含大量的標準函式供用戶使用,如printf()和scanf())的代碼合并成最終的程式(更精確地說,應該是由一個被稱為聯結器的程式來鏈接庫函式,但是在大多數系統中,編譯器運行聯結器),其結果是,生成一個用戶可以運行的可執行檔案,其中包含著計算機能理解的代碼,
編譯器還會檢查C語言程式是否有效,如果C編譯器發現錯誤,就不生成可執行檔案并報錯,理解特定編譯器報告的錯誤或警告資訊是程式員要掌握的另一項技能,
5 第5步:運行程式
傳統上,可執行檔案是可運行的程式,在常見環境(包括Windows命令提示符模式、UNIX終端模式和Linux終端模式)中運行程式要輸入可執行檔案的檔案名,而其他環境可能要運行命令(如,在VAX中的VMS[2])或一些其他機制,例如,在Windows和Macintosh提供的集成開發環境(IDE)中,用戶可以在IDE中通過選擇選單中的選項或按下特殊鍵來編輯和執行C程式,最終生成的程式可通過單擊或雙擊檔案名或圖示直接在作業系統中運行,
6 第6步:測驗和除錯程式
程式能運行是個好跡象,但有時也可能會出現運行錯誤,接下來,應該檢查程式是否按照你所設計的思路運行,你會發現你的程式中有一些錯誤,計算機行話叫作bug,查找并修復程式錯誤的程序叫除錯,學習的程序中不可避免會犯錯,學習編程也是如此,因此,當你把所學的知識應用于編程時,最好為自己會犯錯做好心理準備,隨著你越來越老練,你所寫的程式中的錯誤也會越來越不易察覺,
將來犯錯的機會很多,你可能會犯基本的設計錯誤,可能錯誤地實作了一個好想法,可能忽視了輸入檢查導致程式癱瘓,可能會把圓括號放錯地方,可能誤用C語言或打錯字,等等,把你將來犯錯的地方列出來,這份錯誤串列應該會很長,
看到這里你可能會有些絕望,但是情況沒那么糟,現在的編譯器會捕獲許多錯誤,而且自己也可以找到編譯器未發現的錯誤,在學習本書的程序中,我們會給讀者提供一些除錯的建議,
7 第7步:維護和修改代碼
創建完程式后,你發現程式有錯,或者想擴展程式的用途,這時就要修改程式,例如,用戶輸入以Zz開頭的姓名時程式出現錯誤、你想到了一個更好的解決方案、想添加一個更好的新特性,或者要修改程式使其能在不同的計算機系統中運行,等等,如果在撰寫程式時清楚地做了注釋并采用了合理的設計方案,這些事情都很簡單,
最經典的學習C語言的書:
C Primer Plus 第6版

《C Primer Plus(第6版)中文版》是一本經過仔細測驗、精心設計的完整C語言教程,它涵蓋了C語言編程中的核心內容,《C Primer Plus(第6版)中文版》作為計算機科學的經典著作,講解了包含結構化代碼和自頂向下設計在內的程式設計原則,
與以前的版本一樣,作者的目標仍舊是為讀者提供一本入門型、條理清晰、見解深刻的C語言教程,作者把基礎的編程概念與C語言的細節很好地融合在一起,并通過大量短小精悍的示例同時演示一兩個概念,通過學以致用的方式鼓勵讀者掌握新的主題,
每章末尾的復習題和編程練習題進一步強化了*重要的資訊,有助于讀者理解和消化那些難以理解的概念,本書采用了友好、易于使用的編排方式,不僅適合打算認真學習C語言編程的學生閱讀,也適合那些精通其他編程語言,但希望更好地掌握C語言這門核心語言的開發人員閱讀,
《C Primer Plus(第6版)中文版》在之前版本的基礎之上進行了全新升級,它涵蓋了C語言*新的進展以及C11標準的詳細內容,本書還提供了大量深度與廣度齊備的教學技術和工具,來提高你的學習,
C和指標

全球暢銷30余年的C語言編程入門書籍、C指標經典之作2020新版,ACCU主席Francis,Glassborow傾力推薦,提供寶貴的提示和智慧的警告,
本書是為水平較高的C程式員和學生量身打造的,為那些需要深入理解C編程語言的人提供了以全面詳盡的資源,本書對指標的基礎知識和高級特性進行了全面且深入的講解與探索,確保C程式員能夠將指標的強大功能融入到他們的C程式中,本書內容覆寫全面,對C編程慣用法進行了詳細解釋,還對C指標的一些高級主題進行了深入討論,對于高水平的學生和C程式員來說,本書是相當有價值的教程和參考資料,
本書內容:
提供了完整的背景資訊,以方便讀者全面理解C語言;
全面介紹了指標的內容,包括語法、有效使用指標的藝術,以及指標的常見編程慣用法;
對實作通用抽象資料結構的不同方法進行了比較;
使用簡單、熟悉的寫作風格來清楚解釋難度較大的主題,并使用大量的插圖和圖表將復雜的概念進行可視化;
討論了編程技巧、效率、可移植性和軟體工程等問題,并利用“警告”的方式對一些常見的編程陷阱進行了標注;
介紹了C標準庫中的每一個函式,
進階經典書
C專家編程

C語言程式設計和C++經典著作講述編程思想,軟體開發寶典,全球暢銷30余年,中文版累銷10萬冊,C和指標系列叢書,ACCU主席傾力推薦,
這是一本非常與眾不同的C語言圖書,本書采用輕松、對話式的方式,介紹了作者在實踐經驗中總結出的許多令人吃驚的案例:
將太空探測器炸毀到金星的軟體;
能關閉整個AT&T電話系統的C語言bug;
C程式員作業面試的秘密;
程式員為什么分不清萬圣節和圣誕節;
一個完整的BASIC解釋器的C代碼,
本書揭示了世界上卓-越的C程式員使用的編碼技術,本書盡管以C語言為主題,但還是對C++進行了簡單介紹,C程式員無須花費數周的時間就可以理解這些C++知識,
本書涵蓋了IBM和UNIX系統,真正做到了C語言學習的寓教于樂,對于想要了解更多C語言實作、實用技巧以及C語言奇聞異事的讀者來說,本書是必備讀物,
C 陷阱與缺陷

1.ACCU主席Francis Glassborow傾力推薦,影響了國內外好幾代程式員的經典作品;
2.C++業界資深技術大神、C++標準委員會成員、C++沉思錄作者Andrew Koenig的成名著作;
3.全球暢銷30余年,中文版累銷100000+冊;
4.本書的出發點不是要批判C語言,而是要幫助C程式員繞過編程程序中的陷阱和障礙,
聆聽大師教誨 掌握編程精髓
本書對會讓程式預期行為與實際行為產生很大不同的C語言特性進行了詳細介紹,本書通過具體的案例和有幫助的建議來演示并介紹C語言中的這些陷阱與缺陷,本書每章末尾還包含了一些思考和相應的討論,
即使是C編程專家,也會經常遇到一些需要數天除錯才能修復的問題,本書中的每個示例都會讓C程式員陷入困境,本書將通過展示這些困境來幫助讀者預防這些問題,
除了書中的這些示例之外,本書還提供了下面這些建議:
避免離一(off-by-one)錯誤;
理解和構建函式宣告;
理解指標和陣列之間的微妙關系,
本書源自作者十多年的C編程經驗總結,對于任何曾經撰寫過C程式的人來說(無論是新手還是專家),本手都是理想的閱讀資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291294.html
標籤:其他
