我是先學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++ 的學習書籍,最權威的當屬 C++ 的發明者 Bjarne Stroustrup 大佬所著的《The C++ Programming Language》,但是很明顯這本書不適合初學者,更加適合的還得是《C++ Primer》,也很系統全面。至於再深入可以繼續閱讀諸如《Effective C++》、《STL源碼剖析》、《深度探索C++對象模型》等書籍。


 

如果你想快速掌握C/C++編程,小編推薦我的C語言/C++編程學習基地【點擊進入】!


 

都是學編程小伙伴們,帶你入個門還是簡簡單單啦,一起學習,一起加油~

涉及:編程入門、游戲編程、windows編程、Linux編程、Qt、黑客等等......


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM