百科问答小站 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++ 类当中为什么要有private? 
  c++11如何实现单例模式? 
  C++ 的 sizeof 是怎么实现的? 
  C++中怎么区分char和数值? 
  为什么编译器过度优化导致线程安全问题? 
  C++游戏开发择业前景? 
  c#中没有友元类那么这种设计是否不太合理,如何修改才能得到更好的方案? 
  如何评论"知名游戏开发者称 C++ 是一种非常糟糕、可怕的语言"? 
  为了软件更符合开源风格,c/cpp 代码缩进应该使用4空格还是2空格? 
  libc++ 与 libstdc++ 是什么关系? 

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





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