百科问答小站 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++ 代码。然后两者可以链接到一起。




  

相关话题

  为什么simdjson这么快? 
  C++中 union 储存的 char 成员能否通过 int 成员读取? 
  在C语言中,math.h中定义的各种数学函数在电脑上具体是怎么实现的? 
  C++ 实现接口与实现分离后,文件变得更多了,到底有什么好处? 
  大型c++项目在linux下如何调试? 
  简单c++项目在Windows和Linux下编译连接怎样使用同一个Makefile? 
  C++中开多个数组和用struct封装起来哪个速度更快? 
  现在快2022年了,c++为什么还要实现(.cpp)和声明(.h)分开? 
  C++过于复杂为什么不被淘汰? 
  C/C++ 标准库为什么不支持直接删除一个文件中的部分内容? 

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





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