![]() |
1
22
在编译过程中,一些C++编译器(原始的cFAX,COMMO C++)使用C作为中间语言。大多数C++编译器使用其他中间语言(例如LLVM)。 编辑:由于对历史似乎有些误解,“c with classes”开始使用一个名为“cpre”的预处理器。当时,它被严格地视为C语言的方言,而不是一种单独的语言本身。1983年12月,人们开始把它视为一种独立的语言,而C++的名字被发明了。碰巧,CVAID的开发在1983年4月开始,所以一个合理使用的版本(与少数几个选择)几乎同时使用了“C++”。不过,这似乎主要是巧合,而不是计划。 就产生C作为其输出而言,这在UNIX上非常常见。例如,Berkeley Pascal编译器和至少两个Fortran编译器还生成了C作为其输出。 然而,CPRE和CFRONT之间存在着巨大的差异。虽然两者都产生了C作为输出,但CPRE实际上没有自己的语法检查——它查找了一些特定的东西,并对它们进行了相对机械的翻译。直到C编译器看到结果,才完成真正的语法分析。如果您的代码包含语法错误,几乎可以肯定,在C编译器解析CPRE的输出之前,它不会被捕获。 然而,cfront对源代码本身进行了完整的语法分析,因此(它的代码生成器中没有bug),您可以 从未 请参阅C编译器中的语法错误。C编译器被简单地用作代码生成器,因此没有人需要重写cfront以适应不同的处理器、对象文件格式等。 如果你想了解更多细节,请参见第2章 C++的设计与实现 几乎完全致力于“C with Classes”的时间框架(关于它的其他各种细节在书中传播)。 |
![]() |
2
13
不,但像大多数神话一样,这是有一点道理的。C类的原始编译器(后来成为C++)被昵称为cFrand,并被翻译成C。 |
![]() |
3
6
不是在大多数现代编译器中。 然而,原来的C++编译器实际上是一个预处理器。它生成C代码,然后由C编译器编译whaic。 |
![]() |
4
5
在C++编译器的早期,有些编译器是这样做的。然而,自从80年代末以来,我还没有见过这样的C++编译器。 |
![]() |
5
2
正如其他人的回答。不。 但是,如果您想使用C这样的OOP语言,并将代码编译成C,我建议您看一下 Vala . |
![]() |
6
2
标题似乎是C++的超集,也就是说,你能把C代码转储到C++编译器中吗?在这种情况下,是的,有点… 一个主要的区别是C自动为你投掷指针,C++没有,你需要手动地投掷… 有人还记得什么吗? 这就是我从一个巨大的C项目转换到C++的可怕过程中所记得的。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 3 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 3 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 3 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |