選擇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.506064.com/zh-hant/n/222329.html
微信掃一掃
支付寶掃一掃