簡體   English   中英

C和C ++之間的關系

[英]Relationship between C and C++

當Stroustroup設計C ++時,他的目標之一是C ++盡可能多地是C的超集。 我了解並不是100%如此,但是C中的大多數好代碼也是C ++代碼。

但是我聽說C99支持許多C ++不支持的功能(例如VLA),甚至還有所謂的C1x或C0x。 因此,C ++是僅 C89的超集,從那時起C和C ++幾乎是獨立開發的?

C ++是C89 / C90的近超集。 (不過,我不建議編寫代碼以便能夠將其編譯為C或C ++。)從那時起,C99出現了分歧。 新的C ++標准(通常稱為C ++ 0x)將進行一些嘗試以使其更加兼容,但不會像C99可變長度數組那樣。 Stroustrup對某些C委員會的行動表示失望,顯然是希望他們努力與C ++兼容。

因此,是的,語言在不斷變化。

那是正確的。 C ++最初是C語言的超集。 從那時起,兩者就相互獨立了。

盡一切努力使這些語言在實際可行的情況下保持兼容,並且C ++ 0x將采用C99的某些更改。 但是,它們之間似乎有一定的分歧,其中最明顯的差異就是VLA。 我不知道C ++也會采用restrict

Bjarne Stroustrup的一篇有趣的文章闡明了以下主題: 同級競爭:C和C ++ (pdf)

但是C語言中的大多數好代碼也是C ++代碼。

沒有。

我會說大多數好的C代碼都可以使用C ++編譯器進行編譯。
但這並不能成為C ++代碼。

C ++是僅舊C89的超集,從那時起C和C ++幾乎是獨立開發的?

C ++基於C89。
C隨C99擴展,幾乎沒有合並到C ++ 03中
我們一直在努力使差異最小化,並使C ++ 0x的語言更接近(在合理的范圍內)

即使對於舊的C(又名C89),在引擎蓋下,這種差異也難以處理,從一個運算符返回一個值而不是另一個運算符的返回值,對一個有效值而不對另一個有效的控制流等。具有原型, struct等功能的接口級別

對於較新版本的語言,這種差異更大,因為甚至接口兼容性也可能難以維護。 C99已經具有用於數組函數參數范圍的static關鍵字,兩種語言中的編譯時間常數的概念都非常不同,C ++開始重用舊關鍵字( auto )並過度使用不在保留名稱空間中的新關鍵字...

因此,是的,我認為這種鴻溝將會加劇,兩個社區承認離婚並嘗試分開相處可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM