C語言與C++不得不說的那點事

turingbooks發表於2012-08-13

說到C語言,就不得不說它的繼承者——C++語言。眾所周知,C++語言是在C語言的基礎上,新增了物件導向、模板等現代程式設計語言的特性而發展起來的。兩者無論是從語法規則上,還是從運算子的數量和使用上,都非常相似,所以我們常常將這兩門語言統稱為“C/C++”。雖然因為天然的血緣關係,導致兩者非常相似,就像父親與兒子相貌相似一樣,但是,父親和兒子畢竟是兩個不同的各自獨立的個體,而C語言和C++語言也同樣是兩種各自獨立、各有其特點的程式設計語言。在對硬體資源的操作上,C語言更加直接,而C++語言則相對溫和一些。

除了這些語法規則上的差異之外,兩者最本質的差別在於所採用的程式設計方法的不同。C語言是一門結構化程式設計語言,正如譚老師所說,它的重點在於演算法和資料結構。C程式的設計首要考慮的是如何通過一個過程(通常表現為函式的形式),對輸入(或環境條件)進行運算處理得到輸出(或實現對過程或者事務的控制);而對於C++,首要考慮的是如何構造一個物件模型,讓這個模型能夠契合與之對應的實際問題,這樣就可以通過獲取物件的狀態資訊得到輸出或實現對過程或事務的控制。

所以C語言與C++語言的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“設計”這個概念已經被融入到C++之中,而單就語言本身而言,在C中更多的是演算法的概念。C語言可以說是C++語言的一個自治子集。C語言實現了C++語言中的過程化控制及其他相關功能,而在C++語言中的C(我們可以稱之為“C+”),相對於原來的C還有所加強,引入了過載、行內函數、異常處理等等新鮮玩意兒,C++更是擴充了物件導向設計的內容,如類、繼承、虛擬函式、模板和容器類等等,使之更加符合現代程式設計的需要。

enter image description here

從這些C語言和C++語言的對比來看,C++語言作為C語言的繼任者,似乎已經全面超越了C語言,正所謂青出於藍而勝於藍。那麼我們自然會產生一個疑問,既然C++語言比C語言優秀,為什麼我們不直接學習更優秀的C++語言而要學習它的過去時——C語言呢?

毫無疑問,C++是一門優秀的程式設計語言,它吸收了C語言的諸多優點,同時又新增了很多現代程式設計語言的新特性,這也是它為什麼能夠成為主流的程式設計語言而長期屹立不倒的原因。但是,這個世界上沒有萬靈丹,任何語言都不是萬能的,C++也並不是適合於所有應用場景。在某些方面,C語言有著比C++語言更大的優勢。很多C++不能完成的任務,C語言可以輕鬆完成。例如在NVIDIA CUDA計算系統上,由於作業系統ABI特性的限制以及其特殊架構的執行單元,無法支援C++初始化的任務,最終只實現了C語言,過於複雜的C++最終沒有實現。很多嵌入式開發系統,都只是提供了C語言的開發環境而並沒有提供C++的開發環境;很多C++語言不願意乾的髒活累活,C語言幹起來快活得很。例如某些對效能要求極高的大型系統,諸如搜尋引擎演算法、銀行金融系統等等,只有勤快的C語言能夠出色地完成這些任務,而C++因為過於複雜,在這方面就稍遜一籌了。

正是因為C語言兼顧了接近底層與更高效能的特性,同時語言又比C++語言更加簡潔,使得它自從上世紀70年代被建立以來,一直都是一門主流的程式設計語言,受到廣大程式設計師的鐘愛。而隨著當今世界嵌入式開發的發展、大型演算法應用,特別是搜尋引擎、雲端計算的興起,C語言的用武之地不但沒有萎縮,反而有逐漸擴充套件的趨勢。所以,如果你有意向這些領域發展,C語言是你的不二之選。

enter image description here

綜合起來看,對C語言和C++語言的學習可以相互促進。學好C語言,可以為我們將來進一步地學習C++語言打好基礎,而C++語言的學習,也會促進我們對於C語言的理解,從而更好地運用C語言。

相關文章