百科问答小站 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++ 基本数据类型采用 int x{5}; 的方式进行初始化吗? 
  虚函数一定是运行期才绑定么? 
  C++可否将父类的对象cast子类,并调用子类的private函数? 
  用C语言,能在100行之内实现贪吃蛇吗? 
  c#中虽然异步和多线程是两码事,但是是否异步微软提供的async函数内部还是多线程去实现的? 
  C++ 是否适合做 GUI? 
  c语言有哪些图形库(非c++)? 
  C++原子变量数组能用memset置空吗? 
  C 语言线程间怎么通信? 
  C++20有哪些让你激动不已的新特性? 

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





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