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




  

相关话题

  我经常看到 Java 架构师的说法,但是很少看到 C++ 架构师的说法。有哪些造成该现象的原因? 
  c++初学者有必要深挖这样的问题吗? 
  C++为何不允许在函数中直接传递数组? 
  为什么这个程序电脑运行的结果和手机运行的不一样?数值小的时候一样? 
  如何评价call_in_stack这个库? 
  为什么C++中virtual要翻译为虚函数? 
  指针数组初始化为 nullptr 和直接使用 memcpy 有什么区别? 
  怎样理解C++中“如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题”? 
  为什么 Linux 指针越界时程序会立即被中断,而 Windows 不会? 
  为什么C++库开发人员都喜欢自己造一个字符串类?你见过性能最好开源字符串类是哪个? 为什么? 

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





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