似乎所有编译器都可以处理c和c ++,如gcc,msvc ......
是因为这两种语言非常相似吗?
答案 0 :(得分:6)
实际上,GCC(GNU编译器集合)有两个不同的前端,gcc
和g++
。要指定C ++,您还可以在执行-x c++
时使用.cpp(或其他一些)扩展名,或gcc
。但是,这需要额外的选项(例如在C ++标准库中链接)。
cl
不支持现代C.然而,它会将C源文件编译为C89的变体,您可以使用/TC
明确指定。
对于两者而言,无论使用哪种前端(GCC还有更多),都是正确的,因为有很多共享代码。但是,这些语言确实存在显着差异,这些差异在别处讨论过(this question等)。
答案 1 :(得分:4)
没有专用的C / C ++编译器,因为没有这样的语言....
如果你打算编写一个C ++编译器,那么你也必须能够编译C,所以你也可以提供一个。
可能仍有一些C编译器没有配套的C ++编译器。
答案 2 :(得分:3)
没有。这不是真的。查看Pelles这是一个仅限C的编译器。
答案 3 :(得分:3)
C和C ++的核心语言结构的语义或多或少保持相同,而C ++旨在向C添加结构元素,而不是更改或删除现有的语言功能。因此,如果你去构建一个C ++编译器的麻烦,让它编译C也是相对微不足道的(至少对于ISO C90而言)。 C99在某些重要方面与C ++不同,有些C ++编译器不支持C99,或者在C ++编译器中包含C99功能作为扩展。
C ++也与C语言高度可互操作,例如C ++完全包含ISO C90的标准库,并且可以链接任何C库。可以为C ++库提供C链接兼容接口以供C代码使用(尽管这通常不如C ++调用C代码那么简单。)
早期的C ++工具不是真正的编译器,而是C ++转换器,它们生成C代码以供本机C编译器编译。 Comeau C ++仍采用这种方法,以便在任何带有C编译器的目标上支持C ++,这在C ++工具无法很好地服务于某些目标的嵌入式环境中非常有用。
答案 4 :(得分:3)
TCC是C编译器的一个例子,它不是C ++编译器。实际上编译C ++是一个巨大的痛苦;这么多C编译器也支持C ++的唯一原因是对C ++的需求非常大。
答案 5 :(得分:1)
C ++是C的超集。我不知道这是否仍然是正确的,但至少c ++编译器常常将代码转换为C作为编译的第一步。
编辑:
我一直听说它是一个超集。由于GMan拒绝,我看了维基百科,其中说“C ++通常被认为是C的超集,但这并不严格。[21]大多数C代码可以很容易地在C ++中正确编译,但是有一些差异导致一些有效的C代码在C ++中无效,或者在C ++中表现不同。“ (详见http://en.wikipedia.org/wiki/C%2B%2B。)所以我有点纠正。
编辑2:
我在维基百科文章中进一步阅读。听起来更准确:C ++起初是C; C ++通过向C添加新功能而演变。在某些时候,C ++已经变得足够不再是C的纯超集。从那时起,C也发展了,现在有一些C ++没有的功能。因此它们密切相关,但不再完全相互兼容。
答案 6 :(得分:1)
答案 7 :(得分:0)
答案 8 :(得分:0)
上次我使用它时,National Instruments的Labwindows / CVI套件是C编译器。
答案 9 :(得分:0)
不是这样,有几种,并且在20世纪80年代开始出现C ++编译器产品之前有很多:-)然而,考虑到C ++编译器,从相同的代码库生成C编译器的边际成本是相对的很小,甚至走另一条路并不是一个重要的增量,至少比起汤姆从头开始比较。