App下載

學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?

猿友 2020-09-08 16:13:25 瀏覽數(shù) (3500)
反饋

文章轉(zhuǎn)載自公眾號(hào):CodeSheep,作者h(yuǎn)ansonwong99

最近收到讀者讀者小伙伴所提的問(wèn)題,我順手截了兩個(gè)圖。

![學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?](https://atts.w3cschool.cn/attachments/image/20200908/1599552030227080.jpg "學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?")

![學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?](https://atts.w3cschool.cn/attachments/image/20200908/1599552040346188.jpg "學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?")

實(shí)不相瞞,這類問(wèn)題之前也經(jīng)常看到,但是我忘了截圖了。

每次遇到這種問(wèn)題,看起來(lái)很簡(jiǎn)單,但是打字一時(shí)半會(huì)還真說(shuō)不清,想想今天周末了,寫一篇文章來(lái)統(tǒng)一聊聊吧,如果小伙伴們有不同看法,也歡迎批評(píng)指正。

CC++到底是什么關(guān)系?

首先 C++C 語(yǔ)言本來(lái)就是兩種不同的編程語(yǔ)言,但 C++ 確實(shí)是對(duì) C 語(yǔ)言的擴(kuò)充和延伸,并且對(duì) C 語(yǔ)言提供后向兼容的能力。對(duì)于有些人說(shuō)的 C++ 完全就包含了 C 語(yǔ)言的說(shuō)法還是有點(diǎn)別扭的。

C++ 一開始被本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)發(fā)明時(shí),起初被稱為“C with Classes”,即「帶類的C」。很明顯它是在 C 語(yǔ)言的基礎(chǔ)上擴(kuò)充了類class等面向?qū)ο蟮奶匦院蜋C(jī)制。但是后來(lái)經(jīng)過(guò)一步步修訂和很多次演變(如下圖所示),最終才形成了現(xiàn)如今這個(gè)支持一系列重大特性的龐大編程語(yǔ)言。

![學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?](https://atts.w3cschool.cn/attachments/image/20200908/1599552289173144.png "學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?")

就像經(jīng)典書籍《Effective C++》一開頭就說(shuō)的,現(xiàn)如今我們提到 C++ ,都應(yīng)該視其為一個(gè)龐大的「語(yǔ)言聯(lián)邦」,最起碼包含如下幾個(gè)重要的組成部分:

  • 面向過(guò)程編程
  • 面向?qū)ο缶幊?/strong>
  • 泛型編程
  • 元編程
  • 函數(shù)式編程
  • STL標(biāo)準(zhǔn)庫(kù)

這其中的第一部分「面向過(guò)程編程」,正是C++提供的向后兼容C語(yǔ)言的部分,所以你能看到市面上在售的大部分講C++編程的書,一開始前幾個(gè)章節(jié)基本都是在講「面向過(guò)程編程」的內(nèi)容,包括但不限于:數(shù)據(jù)類型、變量、運(yùn)算符、表達(dá)式、語(yǔ)句、判斷、循環(huán)、函數(shù)、指針等等這些內(nèi)容。

不學(xué)C語(yǔ)言能直接學(xué)C++嗎?

還是像前面所說(shuō),C++編程語(yǔ)言的第一大重要組成部分就是「面向過(guò)程編程」,而這正是C語(yǔ)言老大哥的領(lǐng)域。即使沒(méi)有學(xué)過(guò)C語(yǔ)言,一上來(lái)就直接學(xué)習(xí)C++的小伙伴,應(yīng)該也難逃『面向過(guò)程』這一部分的內(nèi)容。因?yàn)槭忻嫔显谑鄣拇蟛糠种vC++編程的書,開始的章節(jié)都在講「面向過(guò)程編程」的內(nèi)容。

從理論上來(lái)說(shuō),學(xué)C++并不一定非得學(xué)C語(yǔ)言,但是有C語(yǔ)言底子再去學(xué)C++往往更具優(yōu)勢(shì),最起碼「面向過(guò)程編程」這一部分內(nèi)容能夠輕車熟路。

但是遺憾的是,即使是《C++ Primer》這種700多頁(yè)厚的權(quán)威C++書籍,開頭也只有很少一部分在講「面向過(guò)程編程」,所以對(duì)于面向過(guò)程這一部分的講述是肯定沒(méi)有專門講C語(yǔ)言的書籍剖析得細(xì)致和全面的,不然也不會(huì)有側(cè)重講指針相關(guān)的《C和指針》等這類書籍的出現(xiàn)了。

所以個(gè)人建議是在學(xué)C++之前,C語(yǔ)言的基礎(chǔ)還是盡量要夯實(shí),肯定是有幫助的。

C學(xué)得好的,學(xué)C++是否更具優(yōu)勢(shì)?

是的。

最起碼學(xué)C++時(shí),里面的「面向過(guò)程」這一部分內(nèi)容可以說(shuō)輕車熟路了。

C++能替代C語(yǔ)言嗎?

既然C++這么強(qiáng)大,包含這么多模塊和范式,而且也幾乎包含了C語(yǔ)言面向過(guò)程這一部分的內(nèi)容,那為啥還要學(xué)C語(yǔ)言呢?都直接學(xué)習(xí)C++它不香嘛?

是的,C++很強(qiáng)大沒(méi)錯(cuò),但那些強(qiáng)大的范式和機(jī)制本身帶來(lái)的包袱就不輕,也確實(shí)給學(xué)習(xí)者造成了不小的負(fù)擔(dān),甚至勸退了很多人。

而反觀C語(yǔ)言,C語(yǔ)言本身就是一個(gè)把能力、性能效率學(xué)習(xí)成本權(quán)衡得非常極致的一種編程語(yǔ)言,以至于大學(xué)階段必開的程序設(shè)計(jì)課程里基本都有C語(yǔ)言的身影。

而且C語(yǔ)言的應(yīng)用領(lǐng)域極度廣泛,上到操作系統(tǒng)底層的原生接口,下到普通的應(yīng)用層開發(fā),C語(yǔ)言都有著不小的功勞。以至于這么多年來(lái),在Tiobe編程語(yǔ)言排行榜里,C語(yǔ)言都是居高位不下。

![學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?](https://atts.w3cschool.cn/attachments/image/20200908/1599552461192432.png "學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?")

而且2020開年C語(yǔ)言重回巔峰王座,一舉奪得「2019年度編程語(yǔ)言」。雖然這只是一個(gè)看起來(lái)很無(wú)聊的排名,但多多少少能說(shuō)明一些事情。

![學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?](https://atts.w3cschool.cn/attachments/image/20200908/1599552484498456.png "學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?")

所以無(wú)論是過(guò)去,現(xiàn)在,甚至是未來(lái),近50歲的C語(yǔ)言老將軍依然永不為奴。

只有C++這種面向?qū)ο蟮恼Z(yǔ)言才適合大型項(xiàng)目嗎?

C++的出現(xiàn)的確是為了更方便地開發(fā)大型應(yīng)用程序,畢竟面向?qū)ο缶幊汤锏暮芏嘀匾枷牒蜋C(jī)制都對(duì)大型項(xiàng)目和復(fù)雜系統(tǒng)所要求的項(xiàng)目工程化、代碼復(fù)用性/擴(kuò)展性/可維護(hù)性等提供了強(qiáng)大的支撐。

但是擺在眼前的事實(shí)告訴我們,即便是C語(yǔ)言,也照樣可以構(gòu)建出極其復(fù)雜的系統(tǒng)和軟件。上到Linux這種曠世偉大的操作系統(tǒng)內(nèi)核,小到被各個(gè)公司重度依賴的Redis、Nginx等開源軟件或框架,都是C語(yǔ)言的代表作品。

所以有時(shí)候我們不得不承認(rèn)的是,大家所說(shuō)的抽象能力更多的是看寫這個(gè)程序的人,而并非編程語(yǔ)言本身。

小 結(jié)

好啦,扯得有點(diǎn)多了,總結(jié)一下就是:

  • C 語(yǔ)言和 C++ 是兩個(gè)不同的編程語(yǔ)言,只不過(guò)內(nèi)容上有一定的重疊;
  • C 語(yǔ)言是一門很強(qiáng)大的編程語(yǔ)言,我覺(jué)得有機(jī)會(huì)還是要學(xué)一下;
  • 一般來(lái)說(shuō),有了 C 語(yǔ)言的基礎(chǔ),上手 C++ 也會(huì)更快;
  • C++C 各有各的選用考慮和應(yīng)用場(chǎng)景,并沒(méi)有誰(shuí)更好一說(shuō),學(xué)不學(xué)看自己的興趣和自身技術(shù)發(fā)展的考量

以上就是W3Cschool編程獅關(guān)于學(xué)C語(yǔ)言和學(xué)C++它有毛關(guān)系嗎?的相關(guān)介紹了,希望對(duì)大家有所幫助。

0 人點(diǎn)贊