为什么C ++向后兼容C?为什么没有一些“纯粹的”C ++语言?

时间:2011-01-01 18:41:01

标签: c++ c history

C和C ++是不同的语言,我们知道blababla。

但如果这些语言不同,为什么还可以使用malloc或free这样的功能?我确信C ++有各种各样的尘土飞扬的东西,因为C,但是由于C ++是另一种语言,为什么不删除这些东西,使它变得不那么臃肿,更干净清晰?

是不是因为它允许程序员在没有OO模型的情况下工作,或者因为某些编译器不支持C ++的高级抽象功能?

10 个答案:

答案 0 :(得分:22)

因为如果C ++现在的方式不能与C兼容,那么C ++就会死掉。除了粉丝之外,没有人会喜欢C ++,如果它与C不兼容(我知道我可能会因此而被投票。就这样吧!)。

答案 1 :(得分:16)

关于“为什么没有”纯粹的“C ++语言......好吧,至少有一种。最流行的一种叫D,它很棒,设计精良,功能丰富,编码方便,而你可以使用C库。

啊,几乎没有人使用它。 :)

直接的原因是C ++并不足以让人们有充分的理由将数百万行遗留代码移植到更现代的代码中,正如你所描述的那样,像D这样的“纯粹”语言。

答案 2 :(得分:7)

它的设计使您可以移植C代码并直接将其编译为C ++代码,并允许对现有代码进行增量升级。如果C ++没有malloc / free,你就无法将现有的C代码编译为C ++,因为你需要支付一些可怜的笨蛋来查找所有malloc调用并替换它们,这很昂贵。

答案 3 :(得分:7)

大多数操作系统都公开了一个C API,因此如果您想使用C ++进行系统编程,则需要一定程度的C互操作性。

将C标准库合并到C ++标准库中有历史和实际原因:C ++作为C的扩展开始其生命,C标准库已经可以使用了。排除部分库(如mallocfree)是愚蠢的,因为有更多惯用的C ++替代品:如果你想做愚蠢的事情,C ++会让你有能力这样做。

对于实际的语言语义,同样适用 - 但程度较低 - 并且由于向后兼容性,C ++永远不会完全摆脱其C语言遗产。

答案 4 :(得分:5)

C ++被设计为与C兼容 - 实际上它最初是C的超集,但C语言已经改变以打破它。

这意味着可以从C ++代码调用C库 - 包括C运行时库。 意味着这样做是个好主意!

如果你想要一个“纯粹的”C ++,那么你可以在不调用任何C库的情况下使用C ++。

[正如其他人所说,自从我开始输入这个:The Design& C ++的演变是开始阅读背景的好地方。]

答案 5 :(得分:4)

我建议你看看The Design & Evolution of C++,以便更好地了解语言的原因。有很多历史原因可以解释为什么C ++是从C语言中生长出来的,并且向后兼容它。

答案 6 :(得分:3)

早期版本的C ++建立在C语言之上,实际上编译器将C ++代码翻译成C语言,C语言又由本地C编译器编译。 Bjarne Stroustrup非常相信向后兼容性,我敢肯定会抵制任何将功能带走的企图。

你可以在Bjarne的书The Design and Evolution of C++中阅读所有内容。

答案 7 :(得分:1)

还有很多纯语言。然而,它们并没有被广泛使用,因为它们远远超出了大多数程序员的舒适范围。另一方面,C ++允许程序员通过允许C样式慢慢增加。

你正在做的是查看像C#或Python这样的语言,并想知道为什么C ++看起来不像它们,但忘记了那里需要像C ++和Java,或者Awk和Perl这样的踩踏板。

为了适应我之前听过的报价:C#是微软版本的Sun's for-idiots版本的Bell版本的C-enhanced-by-Simula。

答案 8 :(得分:1)

一切都是对的。总结一下:原因是政治。如果你想要一些受欢迎的东西,增强已经流行的东西,你就有了一个现成的市场。设计新的东西,没有人会感兴趣,除非你是Sun,设计一些完全废话,但投入数十亿美元进入图书馆开发和营销。

答案 9 :(得分:1)

malloc()free()是必需的,因此您可以从C ++代码调用C语言库。 C语言库可能会返回一个指向分配有malloc()的内存的指针,该调用者必须使用free()释放;或者,不太常见的是,它可能需要指向分配有malloc()的内存的指针,它可以在内部重新分配realloc()或免费free()