跳轉到內容

C 程式設計/為什麼要學習 C?

來自華夏公益教科書,開放書籍,開放世界

C 是最常用的編寫 作業系統 的程式語言。第一個用 C 編寫的作業系統是 Unix。後來像 GNU/Linux 這樣的作業系統都是用 C 編寫的。C 不僅是作業系統的語言,也是如今幾乎所有流行的高階語言的先驅和靈感來源。事實上,PerlPHPPythonRuby 都是用 C 編寫的。

打個比方,假設你要學習西班牙語、義大利語、法語或羅馬尼亞語。你覺得學習拉丁語會有幫助嗎?就像拉丁語是所有這些語言的基礎一樣,學習 C 將使你能夠理解和欣賞建立在 C 傳統之上的整個程式語言家族。瞭解 C 意味著擁有自由。

為什麼選擇 C 而不是組合語言?

[編輯 | 編輯原始碼]

學習 C 比學習 組合語言 更大的原因是,對於給定的程式設計任務,用 C 編寫程式碼比用匯編語言編寫程式碼更容易、更快。使用 C,你將編寫更少的程式碼行,更快地完成任務,並且比用匯編語言編寫程式碼所需的腦力更少。而且,隨著當今現代編譯器的出現,從 C 原始碼編譯的可執行檔案通常比使用匯編語言“手工”編寫的可執行檔案執行得更快。只有在極少數情況下,而且只有當你真正瞭解自己在做什麼時,組合語言才能在速度上比用可靠編譯器編譯的 C 程式碼有優勢。

而且,使用 C,你不會犧牲對程式碼執行方式的低階控制權。一個典型的 C 語句通常只翻譯成幾個彙編指令。但 C 還為你提供了一個龐大的軟體庫,幫助你執行你不想費心編寫的低階任務。

C 的另一個巨大優勢是可移植性。不同的處理器具有不同的指令集。如果你想在每個要執行程式碼的計算機體系結構上重新編寫和維護彙編程式碼,那將是一項繁重的任務。因此,C 的主要優勢之一是它結合了跨各種計算機體系結構的通用性和可移植性,同時仍然讓你擁有與組合語言相同的低階硬體控制能力。這意味著你可以編寫一次 C 原始碼,並輕鬆地將其編譯成二進位制檔案,以便在各種機器上使用。

例如,C 程式可以在 HP 50g 計算器 (ARM 處理器)、TI-89 計算器 (68000 處理器)、Palm OS Cobalt 智慧手機 (ARM 處理器)、初代 iMac (PowerPC)、Arduino (Atmel AVR) 和 Intel iMac (Intel Core 2 Duo) 上編譯和執行。這些裝置中的每一個都有自己的組合語言,它們完全不兼容於任何其他裝置的組合語言。C 使得你的程式碼能夠在這些機器上以更少的努力執行。

所以,難怪 C 如此受歡迎呢?

就像多米諾骨牌一樣,下一代程式遵循其祖先的趨勢。用 C 設計的作業系統總是帶有用 C 設計的系統庫。這些系統庫反過來被用來建立更高階的庫(如 OpenGLGTK),而這些庫的設計者通常會選擇使用系統庫使用的語言。應用程式開發人員使用更高階的庫來設計文字處理軟體、遊戲、媒體播放器等。他們中的許多人會選擇用更高階的庫使用的語言進行程式設計。這種模式不斷地延續下去...

也就是說,學習組合語言很有趣,也很有意義,因為它可以讓你深入瞭解計算機在非常低的級別是如何工作的。學習組合語言絕對有助於你成為更熟練的 C 程式設計師。因此,我們鼓勵你學習組合語言,但當需要進行實際工作時,你絕對會想要用 C 來完成它。

為什麼選擇 C,而不是其他語言?

[編輯 | 編輯原始碼]

C 的主要設計目的是在保持效能和最小化佔用空間 (CPU 時間記憶體 使用量、磁碟 I/O 等) 的同時,生成可移植的程式碼。這對於 作業系統嵌入式系統 或其他效能非常重要的程式 (“高階”介面會影響效能) 非常有用。使用 C,你可以相對輕鬆地瞭解給定程式碼行實際上做了什麼,因為大多數事情都明確地寫在了程式碼中。C 在低階應用程式方面擁有龐大的程式碼庫。它是 UNIX 的“原生”語言,這使得它靈活且可移植。它是一種穩定且成熟的語言,不太可能在很長一段時間內消失,並且已移植到大多數,如果不是全部,平臺。

一個強大的原因是記憶體分配。與大多數程式語言不同,C 允許程式設計師直接寫入記憶體。C 中的關鍵結構,如結構體、指標和陣列,旨在以一種高效且與機器無關的方式來結構化和操作記憶體。特別是,C 允許控制資料結構的記憶體佈局。此外,動態記憶體分配受程式設計師控制(這也意味著記憶體釋放必須由程式設計師完成)。像 Java 和 Perl 這樣的語言為程式設計師遮蔽了大多數記憶體分配和指標細節(除了 記憶體洩漏 和一些其他形式的過度記憶體使用)。這可能很有用,因為在構建高階程式時處理記憶體分配是一個高度容易出錯的過程。但是,在處理低階程式碼(如作業系統中控制裝置的部分)時,C 提供了一個統一、簡潔的介面。這些功能在大多數其他語言中並不存在。

雖然 Perl、PHP、Python 和 Ruby 可能功能強大,並且預設情況下支援 C 中沒有提供的許多功能,但它們通常不是用自己的語言實現的。相反,大多數這樣的語言最初都依賴於用 C(或其他高效能程式語言)編寫,並且需要將它們的實現移植到新的平臺才能使用。

與所有程式語言一樣,你是否選擇 C 而不是其他高階語言是一個見仁見智的問題,技術和業務需求都可能決定需要哪種語言。


華夏公益教科書