我读过大多数新的C++编译器可以编译C和C++程序,也读到不使用C编程文件的扩展.cpp,以便通知编译器用C编译。使用C++编译器"C编译“和"C++编译”有什么区别。当C程序被赋予扩展.CPP并使用C++编译器进行编译时,会有什么问题吗?
给定一个带有C++约束的C程序(比如不使用typename、new、private、class等作为标识符),与C编译器相比,C++编译器编译具有.CPP扩展的C程序有何不同。
发布于 2015-02-17 16:12:43
使用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++编译器正在编译的是哪种语言,其中任何一个,甚至更多,都会导致fail编译器失败。
发布于 2015-02-17 16:13:39
C++编译器编译C代码并不是一个新特性,而是C++的一种设计策略。然而,许多完全有效C构造不能编译为有效的C++。其中一些是无关紧要的,比如不能对变量使用像new
这样的名称,但是另一些,比如强制强制转换malloc
结果,则需要生成有效的C代码less maintainable。这些变化在C++中是有意义的,它提供了“更好”的选项来做同样的事情,但不是在C中。另外,随着C语言的后期发展,一些C99特性实际上不存在,也永远不会出现在C++中。因此,使用C++编译器可能需要修改完全有效的C代码,如果它是由其他人编写的,这不是一项微不足道的任务,而且可能会引入缺陷。
正因为如此,最好把它留给C编译器--或者更准确地说,你正在使用的编译器套件的C前端--去编译C代码。
发布于 2015-02-17 16:11:50
C和C++是不同的语言,它们有不同的编译器。但是c编译器和c++编译器是兼容的,所以你可以用c++编译器来编译c程序。但是做这件事的好方法是像这样使用外部的"C“(定义__cplusplus在gcc和兼容的编译器中)
YourFile.cpp
#ifdef __cplusplus
extern "C" {
#endif
//Code of your program
#ifdef __cplusplus
}
#endif
https://stackoverflow.com/questions/28557242
复制相似问题