C与C++之间的关系

12 浏览
0 Comments

C与C++之间的关系

在设计C++时,Stroustroup的一个目标是尽可能使C++成为C的超集。我知道这并不完全正确,但大部分好的C代码也可以作为C++代码。

但是我听说C99支持了许多C++不支持的东西(如VLA),而且甚至还会有C1x或C0x之类的东西。所以,C++只是C89的超集,从那时起C和C++基本上是独立发展的吗?

0
0 Comments

C和C++之间的关系是一个经常讨论的话题。虽然有一些努力使这两种语言尽可能兼容,C++0x版本将采用C99的一些改变,但它们似乎会在某种程度上分道扬镳,其中最明显的差异是可变长度数组(VLAs)。我不知道C++是否会采用`restrict`关键字。

下一个C++标准即将完成,不会有新的特性添加进来。由于这个标准将包含C99的兼容性特性,我可以说它们正在向不同的方向发展。

你是否对我写的某些内容持有异议?

或许是吹毛求疵吧。你说它们似乎会分道扬镳,但我觉得实际上它们已经分道扬镳了。

也许我的措辞有点懒散。我的意思是,它们将建立起长期的分歧模式。即使是编程语言标准也不是永远固定的,有一小部分可能性是C++最终会采纳这次避开的C99的许多特性,即使仅仅是为了重新获得一些失去的兼容性,如果这被证明足够重要(和痛苦)。此外,问题是这两种语言是否“正在相对独立地发展”。仅仅说它们正在分道扬镳并不能讲述完整的故事。

0
0 Comments

C和C++之间的关系是一个经常被讨论的话题。C++是C89/C90的一种近乎超集的语言,但并不建议将代码同时编写为C和C++的形式。此后,C99开始与C++有所分歧。新的C++标准(通常称为C++0x)将尝试更加兼容,但不会包含C99的诸如可变长度数组之类的特性。Stroustrup对C委员会的一些行动表示失望,似乎他原本期望他们能更加接近C++的兼容性。

因此,可以说这两种语言正在分化。

其中一个回答提到,C是弱类型的语言,而C++的类型系统并不如此宽松。他举了一个例子:int * foo = malloc(42 * sizeof(int));,这是合法的C代码,但在C++中无法编译通过。在C++中,需要给malloc的返回值添加(int *)的类型转换才能编译通过。但在C中,这个转换只是为了掩盖忘记包含#include <stdlib.h>的错误。因此,他主张在编写代码时要明确自己是在写C还是C++,而不要局限于它们的共同子集。他指出,在C++中,一些不好的C语言构造往往无法正常工作。

另一个回答提到,更好的做法是用sizeof *foo来替代sizeof(int),这也展示了为什么不应该对返回值进行类型转换(如果类型改变,那么代码就会出错)。

这篇文章中的对话展示了C和C++之间存在的问题。由于C++是C的一个超集,因此在编写代码时需要注意语言的差异,避免使用在另一种语言中不起作用的特性。在编写代码时,要明确自己是在写C还是C++,并选择适合该语言的最佳实践。

0
0 Comments

C++最初是C的超集,但随着时间的推移,两者逐渐独立发展。C++的第一个标准并不完全兼容C。Stroustrup的《C++设计与演化》提到,1980年的C with Classes与C并不完全兼容,例如int class;是合法的C语言,但在C with Classes中是非法的。C++的演化引入了更多的不兼容性。

0