我已经读过大多数新的C ++编译器都可以编译C和C ++程序,并且还读取不要将扩展名.cpp用于C编程文件,以便通知编译器在C中编译。什么是" C编译"和" C ++编译"使用C ++编译器。当C程序被赋予扩展名.CPP并使用C ++编译器编译时是否有任何问题?
给定一个带有C ++约束的C程序(比如不使用typename,new,private,class等作为Identifiers),与C编译器相比,C ++编译器使用.CPP扩展编译C程序有多么不同。
答案 0 :(得分:6)
" C编译"有什么区别?和" C ++编译"使用C ++编译器。
每个人都根据不同语言的规则来解释源代码。一个将其解释为C,另一个解释为C ++。
当C程序被赋予扩展名.CPP并使用C ++编译器编译时是否有任何问题?
是。虽然C与C ++的子集非常相似,但是有很多情况下有效的C不是有效的C ++。例如,某些关键字在C ++中保留,但不在C:
中保留int private = 42;
int class = 7;
并且C中允许一些类型转换,但不允许使用C ++
char * array = malloc(32);
如果你在讨论它编译的语言,那么任何这些,以及更多,都会导致C ++编译器失败。
答案 1 :(得分:4)
编译C代码的C ++编译器不是一个新功能,而是一个C ++的设计策略。但是,许多完全有效的C构造不编译为有效的C ++。其中一些是无用的,例如无法使用new
之类的名称作为变量,但有些(例如malloc
结果的强制转换)需要制作有效的C代码less maintainable。这些变化在C ++中有意义,它提供了更好的"同样的选项,但不是在C中。另外,随着C的后续演变,一些C99功能实际上不存在,并且永远不会出现在C ++中。因此,使用C ++编译器可能需要您修改完全有效的C代码,如果由其他人编写并且可能会引入缺陷,这是一项非常重要的工作。
因此,最好将它留给C编译器 - 或者更准确地说,是你正在使用的编译器套件的C前端 - 来编译C代码。
答案 2 :(得分:2)
C和C ++实际上是不同的语言,它们有着非常不同的编译器。但是c编译器与c ++编译器兼容,所以是的,你可以使用c ++编译器构建c程序。 但是这样做的好方法是使用extern“C”(定义__cplusplus在gcc和兼容的编译器中)
YourFile.cpp
#ifdef __cplusplus
extern "C" {
#endif
//Code of your program
#ifdef __cplusplus
}
#endif