但我听说 C99 支持许多 C++ 不支持的东西(如 VLA),而且甚至会有所谓的 C1x 或 C0x。所以,C++ 只是 C89 的超集,从那时起,C 和 C++ 就基本上独立发展了?
C++是C89/C90的一个近乎超集。虽然我不建议编写旨在能够编译为C或C++的代码。此后,C99开始分歧。新的C++标准(通常称为C++0x)将尝试更兼容,但不会有像C99可变长数组之类的东西。Stroustrup对C委员会的一些行动表示失望,显然他曾期望他们试图更接近C++的兼容性。
所以,是的,这两种语言正在分化。
sizeof *foo
替换 sizeof(int)
会更好,这也说明了一个重要的原因:不要强制转换返回值(否则,如果你改变类型,代码就会出错)。 - R.. GitHub STOP HELPING ICE没错。C++ 最初是作为 C 的超集开发的。自那时起,这两者已经独立发展。
int class;
在C语言中是可以的,但在带类C语言中是非法的。随着C++的发展,引入了更多的不兼容性。 - David Thornley有一项协调一致的工作是尽可能使语言兼容,C++0x将采用一些C99的更改。但它似乎很可能会在某种程度上分歧,其中VLAs是最显着的差异。我不知道C++是否也会采用restrict
。
一篇由Bjarne Stroustrup撰写的有趣文章,阐述了C和C++之间的竞争关系:Sibling Rivalry: C and C++(pdf)。
但大部分好的C代码也是C++代码。
不是这样的。
我认为大部分好的C代码可以使用C++编译器编译。
但这并不意味着它是C++代码。
C++只是旧的C89的超集,从那时起C和C++几乎是独立发展的吗?
C++是基于C89的。
C语言通过C99进行了扩展,其中很少有部分被纳入到C++03中。
目前正在努力尽可能地缩小差距,并使两种语言更加接近(在合理范围内),以便于C++0x。
即使是旧的C语言,也很难处理操作符的返回值不同、控制流在一个语言中有效而在另一个语言中无效等问题。它们在函数原型、结构体等接口级别上是可以使用的。
对于较新版本的语言,这种差异更加明显,因为即使是接口兼容性也可能难以维护。 C99已经有了用于数组函数参数边界的static
关键字,两种语言中编译时常量的概念也有很大不同,C++开始重用旧的关键字(auto
),并过度使用未在保留命名空间中的新关键字...
所以,我认为这种分歧会越来越大,对于两个社区来说,承认分离并尝试分别相处可能会更好。
malloc
的使用。 - R.. GitHub STOP HELPING ICE