1. 程式人生 > >《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記一:C語言概述

《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記一:C語言概述

1.1 C語言的歷史

1.1.1 起源

  1. C語言是美國貝爾實驗室的 Dennis Ritchie、Ken Thompson 等人為開發 UNIX 作業系統而於 1972 年設計的一種計算機程式語言。

1.1.2 標準化

  1. 1978 年,Dennis Ritchie 和 Brian Kernighan 合作編寫的世界上第一本關於C語言的書——《The C Programming Language》出版。由於當時沒有C語言的正式標準,所以這本書就成為了事實上的標準,被稱為“K&R”或者“白皮書”。
  2. 1983年,美國國家標準協會(ANSI)開始推動本國C語言標準的制訂。經過多次修訂,第一份官方的C語言標準於1988年完成,並在1989年正式通過。1990年,國際標準化組織(ISO)也通過了此項標準。這一C語言標準通常稱為“C89
    ”或“C90”。
  3. 1999年,國際標準化組織和國際電工委員會(IEC)釋出了C語言的第二個官方標準——C99(也是本書著重介紹的內容)。
  4. 2011年,國際標準化組織和國際電工委員會再次釋出新的C語言標準。這個標準被稱為“C11”,也是目前最新的C語言標準

1.1.3 基於C的語言

  1. C語言對現代程式語言有著巨大的影響,許多現代程式語言都借鑑了大量C語言的特性,例如C++、Java、C#和Perl等。
  2. 在許多現代程式語言普及的今天,學習C語言的意義:第一,學習C語言有助於更好地理解C++、Java、C#、Perl以及其他基於C的語言的特性,一開始就學習其他語言的程式設計師往往不能很好地掌握繼承自C語言的基本特性;第二,目前仍有許多C語言程式,我們需要讀懂並維護這些程式碼;第三,C語言仍然廣泛應用於新軟體開發,特別是在記憶體或處理能力受限的情況下以及需要使用C語言簡單特性的地方。

1.2 C語言的優缺點

  1. 一門程式語言的優缺點都源於該語言的最初用途(C語言的最初用途是編寫作業系統和其他系統軟體)和它自身的基礎理論體系。
  2. C語言是一種底層語言。為了適應系統程式設計的需要,C語言提供了對機器級概念(例如位元組和地址)的訪問,而這些正是其他程式語言試圖隱藏的內容。
  3. C語言是一種小型語言。與其他許多程式語言相比,C語言的特性較少,在很大程度上依賴一個標準函式的“庫”(“函式”類似於其他程式語言中描述的“過程”、“子例程”或“方法”)。
  4. C語言是一種包容性語言。C語言假定使用者知道自己在做什麼,因此它提供了比其他許多語言更廣闊的自由度。此外,C語言不像其他語言那樣強制進行詳細的錯誤檢查。

1.2.1 C語言的優點

  1. 高效。高效性是C語言與生俱來的優點之一。
  2. 可移植。可移植性雖然不是C語言設計之初的主要目標,但還是成為了它的一大優點。當程式需要在多種機型上執行時,常常會使用C語言來編寫。
  3. 功能強大。C語言擁有龐大的資料型別和運算子集合,這使得它具有強大的表達能力,往往寥寥幾行程式碼就可以實現許多功能。
  4. 靈活。C語言在其特性使用上的限制非常少。在其他許多語言中認定為非法的操作在C語言中往往是允許的。這個特點可能讓某些錯誤溜掉,但卻使程式設計更加輕鬆。
  5. 標準庫。C語言的標準庫包含了大量可以用於輸入/輸出、字串處理、儲存分配以及其他實用操作的函式。
  6. 與UNIX系統的整合。C語言在與UNIX系統(包括Linux系統)結合方面特別強大。事實上,一些UNIX工具甚至假定使用者是瞭解C語言的。

1.2.2 C語言的缺點

  1. C程式更易隱藏錯誤。C語言的靈活性使得用它程式設計出錯的概率較高。在用其他語言程式設計時可以發現的錯誤,C語言編譯器卻無法檢查到。
  2. C程式可能會難以理解。C語言的許多特性可以用多種方式結合使用,其中一些結合方式儘管程式設計者心知肚明,但是其他人恐怕難以理解。另外,C語言的簡明扼要和靈活性也大大增加了C程式的閱讀難度。
  3. C程式可能會難以修改。如果在設計中沒有考慮到維護的問題,那麼用C語言編寫的大型程式將很難修改。C語言缺少像許多現代程式語言中“類”與“包”(用來將大程式分解成許多更容易管理的小模組)的特性。

1.2.3 高效地使用C語言

  1. 學習如何規避C語言的缺陷。可以參考 Andrew Koenig 的《C陷阱與缺陷》一書。
  2. 使用軟體工具使程式更加可靠。例如 lint 等軟體工具以及其他除錯工具。
  3. 利用現有的程式碼庫。獲取適當的庫既可以大大減少錯誤,也可以節省相當多的程式設計工作時間。
  4. 採用一套切合實際的編碼規範。精心選擇的規範可以使程式更加統一,並且易於閱讀和修改。
  5. 避免“投機取巧”和極度複雜的程式碼。雖然C語言鼓勵使用程式設計技巧,但是千萬不要沒有節制,因為使用過多的技巧可能會使得程式難以理解。
  6. 緊貼標準。為了程式的可移植性,若非確有必要,最好避免使用不屬於C語言官方標準的特性和庫函式。

問與答

  1. lint 可以檢查出C程式中潛在的錯誤,尤其是那些被編譯器漏掉的錯誤。
  2. lint 是一個標準的UNIX工具。如果你使用的是UNIX作業系統,那麼你將會自動獲得 lint。但如果使用的是其他作業系統,則可能沒有 lint,需要自行上網下載。
  3. lint 有一個增強版本——splint(Secure Programming Lint)。這一工具包含於許多 Linux 作業系統的發行版。
  4. 許多編譯器除了檢查錯誤的功能外,還提供警告(甚至是多級警告)的功能,可以指出程式中可能存在問題的地方。