C和C++之间的关系

Arm*_*yan 8 c c++ compatibility

当Stroustroup设计C++时,他的目标之一就是C++尽可能地成为C的超集.我知道这不是100%的情况,但C中的大多数优秀代码也是C++代码.

但我听说C99支持C++没有的许多东西(比如VLA),甚至还有C1x或C0x,无论它叫什么.那么,C++是 C89 的超集,从那时起C和C++几乎是独立开发的?

Dav*_*ley 7

C++是C89/C90的近乎超集.(我不建议编写代码,以便能够将其编译为C或C++.)从那时起,C99发散了.新的C++标准(通常称为C++ 0x)将尝试更兼容,但不会有像C99可变长度数组那样的东西.Stroustrup对C委员会的一些行动表示失望,显然他们曾期望他们试图更接近C++的兼容性.

所以,是的,语言是分歧的.

  • @MSalters:在我看来,说的并不完全正确。`int * foo = malloc(42 * sizeof(int));` 是正确的 C,但不能在 C++ 中编译。将 `(int *)` 强制转换添加到 `malloc` 使其可以在 C++ 中编译,但它在 C 中所做的唯一事情就是掩盖您忘记了 `#include <stdlib.h>` 的情况。自从我遇到这种情况以来,我一直主张知道您正在编写 C 还是 C++,而不是将自己限制在公共子集上。确实,更糟糕的 C 结构往往无法在 C++ 中工作。 (2认同)
  • 如果用`sizeof*foo`替换`sizeof(int)`会更好,这也说明了一个重要的原因*不*转换返回值(如果更改类型则代码会中断). (2认同)