最近,身邊有許多小伙伴已經開始學習編程了,但是呢,學習又會碰到許多的問題,其中作為新手小白提到最多的問題就是編程語言的選擇。
每次遇到這種問題,看起來很簡單,但是又有很多小伙伴搞不清編程語言之間的關系;今天呢,作為一名從C入門的程序員的我,我來為大家探討一下我對C語言和C++這兩門編程語言的關系,如果小伙伴們有不同看法,也歡迎批評指正,評論區見。

C語言和C++到底是什么關系?
首先C++和C語言本來就是兩種不同的編程語言,但C++確實是對C語言的擴充和延伸,並且對C語言提供后向兼容的能力。對於有些人說的C++完全就包含了C語言的說法也並沒有錯。
C++一開始被本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)發明時,起初被稱為“C with Classes”,即「帶類的C」。很明顯它是在C語言的基礎上擴充了類class等面向對象的特性和機制。但是后來經過一步步修訂和很多次演變(如下圖所示),最終才形成了現如今這個支持一系列重大特性的龐大編程語言。

就像經典書籍《Effective C++》一開頭就說的,現如今我們提到C++,都應該視其為一個龐大的「語言聯邦」,最起碼包含如下幾個重要的組成部分:
♨ 面向過程編程
♨ 面向對象編程
♨ 泛型編程
♨ 元編程
♨ 函數式編程
♨ STL標准庫
這其中的第一部分「面向過程編程」,正是C++提供的向后兼容C語言的部分;
所以你能看到市面上在售的大部分講C++編程的書,一開始前幾個章節基本都是在講「面向過程編程」的內容,包括但不限於:數據類型、變量、運算符、表達式、語句、判斷、循環、函數、指針等等這些內容。
不學C語言能直接學C++嗎?
還是像前面所說,C++編程語言的第一大重要組成部分就是「面向過程編程」,而這正是C語言老大哥的領域。即使沒有學過C語言,一上來就直接學習C++的小伙伴,應該也難逃『面向過程』這一部分的內容。因為市面上在售的大部分講C++編程的書,開始的章節都在講「面向過程編程」的內容。
從理論上來說,學C++前並不一定非得學C語言,但是有C語言底子再去學C++往往更具優勢,最起碼「面向過程編程」這一部分內容能夠輕車熟路。
但是遺憾的是,即使是《C++ Primer》這種700多頁厚的權威C++書籍,開頭也只有很少一部分在講「面向過程編程」,所以對於面向過程這一部分的講述是肯定沒有專門講C語言的書籍剖析得細致和全面的,不然也不會有這種重點側重於指針相關的《C和指針》等這類書籍的出現了。
所以個人建議是在學C++之前,C語言的基礎還是盡量要夯實,肯定是有幫助的。
C學得好的,學習C++是否更具優勢?
是的。
最起碼學C++時,里面的「面向過程」這一部分內容可以說輕車熟路了。
C++能替代C語言嗎?
既然C++這么強大,包含這么多模塊和范式,而且也幾乎包含了C語言面向過程這一部分的內容,那為啥還要學C語言呢?都直接學習C++它不香嘛?
是的,C++很強大沒錯,但那些強大的范式和機制本身帶來的包袱就不輕,也確實給學習者造成了不小的負擔,甚至勸退了很多人。
而反觀C語言,C語言本身就是一個把能力、性能、效率和學習成本權衡得非常極致的一種編程語言,以至於大學階段必開的程序設計課程里基本都有C語言的身影。
而且C語言的應用領域極度廣泛,上到操作系統底層的原生接口,下到普通的應用層開發,C語言都有着不小的功勞。以至於這么多年來,在Tiobe編程語言排行榜里,C語言都是居高位不下。

而且2020開年C語言重回巔峰王座,一舉奪得「2019年度編程語言」。雖然這只是一個看起來很無聊的排名,但多多少少能說明一些事情。

所以無論是過去,現在,甚至是未來,近50歲的C語言老將軍依然永不為奴。
只有C++這種面向對象的語言才適合大型項目嗎?
C++的出現的確是為了更方便地開發大型應用程序,畢竟面向對象編程里的很多重要思想和機制都對大型項目和復雜系統所要求的項目工程化、代碼復用性/擴展性/可維護性等提供了強大的支撐。
但是擺在眼前的事實告訴我們,即便是C語言,也照樣可以構建出極其復雜的系統和軟件。上到Linux這種曠世偉大的操作系統內核,小到被各個公司重度依賴的Redis、Nginx等開源軟件或框架,都是C語言的代表作品。
所以有時候我們不得不承認的是,大家所說的抽象能力更多的是看寫這個程序的人,而並非編程語言本身。
小結
總結一下就是:
✍ C語言和C++是兩個不同的編程語言,只不過內容上有一定的重疊;
✍ C語言是一門很強大的編程語言,我覺得有機會還是要學一下;
✍ 一般來說,有了C語言的基礎,上手C++也會更快;
✍ C++和C各有各的選用考慮和應用場景,並沒有誰更好一說,學不學看自己的興趣和自身技術發展的考量。
書籍推薦
最后聊一聊學習C語言和C++的書籍。
個人覺得如果想系統學習這兩門語言,最好還是得看一下經典的書籍。
關於C語言學習書籍:
最最權威的當然是C語言的發明者Dennis M. Ritchie所著的《The C Programming Language》(它也有中文版的),除此之外《C Primer Plus》也很系統全面,值得推薦一下。
關於C++的學習書籍:
最權威的當屬C++的發明者Bjarne Stroustrup大佬所著的《The C++ Programming Language》,但是很明顯這本書不適合初學者,更加適合的還得是《C++ Primer》,也很系統全面。至於再深入可以繼續閱讀諸如《Effective C++》、《STL源碼剖析》、《深度探索C++對象模型》等書籍。
看到這里是不是又學到了很多新知識呢~
如果你很想學編程,小編推薦我的C語言/C++編程學習基地【點擊進入】!
都是學編程小伙伴們,帶你入個門還是簡簡單單啦,一起學習,一起加油~
還有許多學習資料和視頻,相信你會喜歡的!
涉及:游戲開發、常用軟件開發、編程基礎知識、課程設計、黑客等等......

