C和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的一些变化。 但它们似乎有可能在某种程度上出现分歧,其中VGA是最显着的差异。 我不知道C ++也会采用restrict

Bjarne Stroustrup撰写的一篇有趣的文章阐述了这一主题: 兄弟竞争:C和C ++ (pdf)

即使对于老C,也就是C89,在引擎盖下,差异很难处理,从一个而不是另一个的左值的操作符返回,对一个而不是另一个有效的控制流等。具有原型, struct等的函数的接口级别

对于较新版本的语言,这甚至更加分歧,因为即使是接口兼容性也可能难以维护。 C99已经为数组函数参数的边界设置了static关键字,编译时常量的概念在两种语言中都有很大不同,C ++开始重用旧关键字( auto )并过度使用不在保留命名空间中的新关键字…

所以是的,我认为这种鸿沟将会增长,两个社区可能会更好地承认离婚并试图分开相处。

但C中的大多数优秀代码也是C ++代码。

没有。

我想说大多数优秀的C代码都可以使用C ++编译器编译。
这不会成为C ++代码。

C ++是旧C89的超集,从那时起C和C ++几乎是独立开发的?

C ++基于C89。
用C99扩展C,其中很少一部分被掺入C ++ 03中
目前正在努力最大限度地减少差异,并使C ++ 0x的语言更接近(在合理的地方)