學C語言和C++它有毛關係嗎?

這是最近一週時間幾個讀者小夥伴所提的問題,我順手截了兩個圖。git

實不相瞞,這類問題以前也常常看到,可是我忘了截圖了。github

每次遇到這種問題,看起來很簡單,可是打字一時半會還真說不清,想一想今天週末了,寫一篇文章來統一聊聊吧,若是小夥伴們有不一樣見解,也歡迎批評指正,評論區見。面試

本文在開源項目: https://github.com/hansonwang99/JavaCollection 中已收錄,裏面包含不一樣方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中...

編程


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這種曠世偉大的操做系統內核,小到被各個公司重度依賴的RedisNginx等開源軟件或框架,都是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++對象模型》等書籍。

這些書讀完,成神之路即可由此開啓。

本文在開源項目: https://github.com/hansonwang99/JavaCollection 中已收錄,裏面包含不一樣方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中...


天天進步一點點

慢一點才能更快

相關文章
相關標籤/搜索