百科问答小站 logo
百科问答小站 font logo



C++ 对 c 兼容是什么意思? 第1页

  

user avatar   pansz 网友的相关建议: 
      

就是指当年发明C++的时候,兼容当年的C标准代码,也就是33年前的C89标准代码。

不过从C99开始,两者就分道扬镳了。C99,C11都是不与C++兼容的。C++只兼容三十三年前的C89标准。

为什么会这样呢?因为当年的C++是真的本着「干掉C语言」去的,既然要干掉C语言,干掉C语言编译器,那么就必须能够直接编译C语言的代码,不然现有的大量C语言代码就没法用了。

后来的情况也看见了,C++根本没能干掉C语言,C语言必须长期存在,那么C++继续保持兼容C语言就变得没有意义,毕竟你完全可以用C语言编译器编译C代码。

一个 C++ 编译器能够直接编译 C89 代码,这不叫支持 C 语言,因为 C++ 在语言标准上本来就支持 C89,能编译 C89 代码的 C++ 编译器只是个正常的普通编译器。

如果一个C++编译器并不能编译 C99 以及 C11 代码,我们称这个编译器只支持 C++ 编译,并不支持 C 语言编译。


总结:当初C++决定兼容C是为了干掉C语言。因此兼容33年前的C89标准。这个目标失败以后,C++已经没有必要再兼容C语言,所以C++并不支持C99以及以后的C语言标准。

现代编程领域一般也不认为 C++ 跟 C 代码互相兼容,这个意思就是:把 C 代码直接当作 C++ 代码进行编译的行为,是不建议的,你应当用 C 编译器编译 C 代码,C++ 编译器编译 C++ 代码。然后两者可以链接到一起。




  

相关话题

  关于C/C++编译器,有哪些是有中文报错的吗? 
  如何用最简短的二进制代码表示一张19*19的围棋棋盘的情况? 
  Qt 为什么在桌面应用(Windows 平台)中不流行呢? 
  求助:C++中应该怎样理解实参和形参的区别? 
  Linus Torvalds 的 C++ 水平如何,为什么他敢炮轰此编程语言? 
  Qt QTime的toString是如何实现的? 
  为什么指针不能相加? 
  在C++中,为什么部分程序员喜欢在循环中写‘++i’而不是‘i++’? 
  C/C++ 数组的下标为何要从 0 开始,而不从 1 开始? 
  有什么C可以实现但C++不能实现的东西吗? 

前一个讨论
如何看待雷军票选最受欢迎小米手机,小米 6 排名第一?你曾用过哪款小米手机,体验如何?
下一个讨论
4 月 1 日新交规执行后,为何我高速 140 行驶油耗比 120 还更低?高速最经济的车速是多少?





© 2025-01-31 - tinynew.org. All Rights Reserved.
© 2025-01-31 - tinynew.org. 保留所有权利