既然 C 是 C 的超集,為什麼還是有不少人認為 C 不如 C?

時間 2021-05-31 05:30:07

1樓:zpan

並沒有。只是覺得大家部署 C++11/14 的速度太慢了,以至於我現在只能用 gcc 4.4 的 -std=gnu++0x + boost 當個殘缺的 C++14 來用。

2樓:Coioidea

這個問題很火啊,最近剛剛學習C略有研究。

C和C++在基本語法上是相通的,只不過c++的擴充套件語法更強大,like瑞士軍刀。最主要的不同還是在設計理念上吧。現在的趨勢是c向c++靠攏中。

3樓:煮面狂魔

我是用C++做開發的,剛看了一下《深入理解C++11 :C++11 新特性解析與應用》pdf,堅持看了兩個小時,真的是堅持,然後我就來google 「c++很操蛋」 了。後來我就把pdf刪掉了。

還記得當初學 python 有種震驚和享受的感覺,而C++,在你當初費了很大勁搞懂模版之後,現在C++11又來了個外部模版、預設引數模版。那麼問題來了,既然外部模版的作用,是為了編譯後只保留變數的乙個副本,減少儲存空間的占用,那麼這種事,為什麼要交給程式設計師來做?C++,打算棄坑。

4樓:雷鵬

這麼說吧,用C,是因為程式設計師的能力不足以控制C++,很多C++程式設計師剛練了點三腳貓功夫,就開始顯擺,炫耀C++技巧,就連 boost,其技巧炫耀的部分也遠多於實用性,於是,我只使用它 「可移植性語言擴充套件」 的子集

5樓:楊喚晨

1、執行效率這是最好理解的、也是最明顯的一條。C++擴充套件出來的物件、虛函式、模板等等技術的時間開銷、記憶體開銷都很大。因此,如果要寫驅動等接近底層的軟體,一般選擇C語言

2、「漂亮」這是最重要的一條。乙個漂亮的程式語言,應該具有簡潔的語義、易學易用的語法、合情合理(或說是完美)的語言設計;這幾條,C做到了,而C++卻相去甚遠。舉個例子,僅談論const,C++就有常物件、常資料、常資料成員、常函式成員等等亂七八糟的概念;實踐證明,這些概念除了讓C++學起來更難、用起來更令人提心吊膽意外,實在沒別的太大用處。

C++是門強大的語言,但並不漂亮;相比之下,C要短小精悍的多。

總而言之,「更強」不代表「更好」;與其「面面俱到」,不如「短小精悍」。如果你能理解簡單到只剩乙個Home鍵的蘋果為何能取得如此巨大的成功,那麼你就不難理解大家為什麼更喜歡C而非C++。C是完美的,它的語法裡沒有一句廢話,它甚至為丹尼斯贏得了圖靈獎,而C++呢?

6樓:shooting

還有人認為現代醫(xi)學(yi)不如傳統醫(zhong)學(yi)的呢。

當然不吐槽的話,超集意味著選擇多,選擇多意味著一大堆好處和一大堆壞處。好處像是表達能力強,效率高,壞處就是難學,難寫,寫不好就難看,難讀。

當然還有很大的個人喜好在裡面,就像汽車,有人喜歡賓士,有人喜歡寶馬,但就運載工具來講,都tm差不多

7樓:戈君

大部分回答在比較C和C++的語言特性,但是,語言的應用場景在我看來才是最關鍵的因素。語言的所謂」複雜特性「其實能有多複雜呢?又不是讓你寫編譯器。

語言設計者已經挖空心思盡量簡單一致地呈現特徵了,否則這兩門程式語言怎麼會流行?在這兩門語言最擅長也最常見的系統程式設計中,難題大都來自系統本身,和語言真心沒關係,C夠用了,C++更擅長泛型。回到你的具體問題,這兩門語言有差別,往細說挺多的,但真正的難題比語言差異難多了,所以它倆的差別可能是茶餘飯後的聊資,也可能是無病呻吟的藉口。

(補充:除了專業的編譯器編寫者,大部分程式設計師不太重視語言的型別系統,而這正是乙個語言的本質,這話怎麼說?語言編寫的程式執行起來後其實和語言本身沒什麼關係,通俗地說,都是跑的機器碼,語言的痕跡很淡。

那我們在談」語言差異「,描述語言的」語言」到底是什麼?就是型別。型別和型別間的變換定義了語言,型別是比語言更高階的「語言」,語言的演變就是型別的演變。

而C++一直想在不妥協效能的前提下提供更好的型別系統,在這點上C++一直活躍,也做的很不錯,所以C++11中才會出現auto,lambda等等特性。而C在型別系統上已經」死「了,換句話說,這就是一門「死」語言。死 vs 活,保守 vs 活躍,回顧 vs 學習,我想這是產生很多話題的源頭吧)

8樓:李遙

C++主要是毀在STL上:本來Bjarne Stroustrup也沒這個想法,給Alexander Stepanov帶到溝裡去了。結果是C++的標準庫變成用template這種歪門邪道的方式實現的了,而且由於是標準庫,影響了所有的C++第三方庫

C++另一條決策失誤是沒有及早發現無GC的系統和Exception是不相容的。最後Stroustrup不得已提出RIIA(RAII)這種方式。但是給每個堆物件包乙個棧物件是個很醜陋的做法,C使用者很快就拋棄了這種愚蠢設計

9樓:

效能上姑且不論,就單從設計上來說,有的時候,功能多了反倒成了累贅,也就是

所謂"心智包袱".比如我要實現乙個執行期統一介面地呼叫根據物件的不同而改變的

函式,在C語言裡,我可能思考1秒鐘,然後想:"恩,使用函式指標",而在C++裡,我的思維可能是這樣的:

"恩,我用函式指標吧"..."等等,用虛函式最好了"..."哦,或許這裡我該定義個基類"...

"我知道了還是用模板最好"...."等等匿名函式似乎未來擴充套件性更強點"..."STL裡有個

和剛才乙個函式類似的功能,或許我該"...."我知道了用模板元在編譯器解決一下這個問題..".....

有時候這樣真的很煩,尤其是結構比較複雜的時候,經常設計了一整天結果發現更好的設計(事實上你總能找到更好的設計),而C簡單明瞭,乙個需求只有一條路能幹.

當然,這樣也不是不好,好處就是你能幹一切...C++11+boost之後更是如此了

10樓:

TAOUP 中引用過一句話:完美之道,不在於無可增加,而在於無可刪減。

每個人都有自己的偏好,很多人說過c++適合單幹,因為它擁有太多的特性,而每個人的水平和想法不可能一樣。

coolshell上的一片博文: http://coolshell.cn/articles/7992.html

11樓:葉劍軍

C++是C語言超集...不好說,經過了C++11和C11的改進。但我想說的是後面的問題,C語言執行效率一定比C++好(它更加接近機器語言)....

其實個人是覺得C++像乙個轉介面,底層因為效率問題,而且沒有那麼複雜一定使用c語言。在硬體領域,C語言必勝,軟體領域,因為複雜度提高了很多,需要更多物件導向與設計模式的概念,C++佔據一定優勢。

所以,效率的話,可以用C語言最好。

企業開發,面向可持續的話,一般都是C++

12樓:

C是一把手槍,用不好打爆你的腳。C++是一把來復槍,用不好打爆你的腿。

這是C++之父說的。他根本不指望有程式設計師能完全明白這門語言。也就是說,C++過於複雜不適合大多數人。

13樓:張杰

說 C++不如 C 的原因在於可以替代 C++ 工作的語言很多,而可以替代 C 工作的語言有多少?也就說語言的可選性多了導致的。

14樓:大妖

這個,就好像玩遊戲的早期殺人遊戲和三國殺一樣。

早期版本的殺人遊戲是我的最愛,反而我基本上不玩三國殺。

因為殺人遊戲規則簡單,但是可玩的內容很多,可以讓大家快樂的遊戲。

但是三國殺的規則就太複雜了,一不小心就忘記了判定什麼東西。乙個人的出牌過程可能會面臨著三四種判定,然後再考慮出牌,棄牌……整個過程都在小心翼翼,生怕有什麼判定錯過了,或者犯了什麼錯誤。

15樓:

1.這其實就是乙個「什麼都沒有,就是什麼都有」的哲學問題。

2.c相對於c++,可以說什麼都沒有;同樣也沒有能夠被人抓住把柄的東西;

3.c++提供的特性多了,被人詬病的東西同樣也就多了。

4.c++本身不是不好,她是命不好,生在c後面。

既然c 是c的超集,那c相對於c 的優勢在哪,為什麼c的編譯器沒有被淘汰?

我知道老師可能跟你們說c艹是c的超集,但真不是這樣。c艹還因為雜亂被人各種吐槽不如c。為人詬病的地方挺多的,知乎一搜就有,總得來說確實web都用指令碼語言,底層用c。話又說回來了,高中生物不是還把細胞核不當細胞器來著,大學老師說的話留個心眼,好多沒去企業工作過,只教書的。 涇渭漳淮 看幾個回答,似乎...

既然系統預設裝軟體是c盤,那為什麼不把c盤空間做大點呢?

kid C盤是系統盤,多大容量完全是自己分出來的,你的c盤容量應該是別人給分的,一般為了電腦速度快一些,會用SSD做系統盤,你說你就乙個1T的硬碟,那其實可以完全分成乙個區,也就是就乙個C盤,這樣就不用糾結裝在那個分割槽了,但是一旦重灌系統就GG。軟體最後還是裝在別的盤,系統盤滿了的話很麻煩的,主要...

既然C語言簡單,為什麼還要花那麼長的時間去學習?

窗戶 因為這是真正的面向機器程式設計,高階彙編是也,個人覺得,對機器的原理清楚還是很有必要的。然而c語言簡單嗎?我看不見得,既然是面向機器,面向底層,你需要明白一大堆底層的概念,才能編寫出合適的程式。C語言的簡單從某種意義上來說,就是和彙編的簡單一致。也就是它最基本的概念就那麼點,知道記憶體是乙個連...