首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不.cpp到一个c程序文件呢?

为什么不.cpp到一个c程序文件呢?
EN

Stack Overflow用户
提问于 2015-02-17 16:02:45
回答 3查看 128关注 0票数 0

我读过大多数新的C++编译器可以编译C和C++程序,也读到不使用C编程文件的扩展.cpp,以便通知编译器用C编译。使用C++编译器"C编译“和"C++编译”有什么区别。当C程序被赋予扩展.CPP并使用C++编译器进行编译时,会有什么问题吗?

给定一个带有C++约束的C程序(比如不使用typename、new、private、class等作为标识符),与C编译器相比,C++编译器编译具有.CPP扩展的C程序有何不同。

EN

回答 3

Stack Overflow用户

发布于 2015-02-17 16:12:43

使用C++编译器进行"C编译“和"C++编译”有什么不同。

每个都根据不同语言的规则解释源代码。一个解释为C,另一个解释为C++。

当C程序被赋予扩展名.CPP并用C++编译器编译时,会有什么问题吗?

是。尽管C非常类似于C++的一个子集,但在很多情况下,有效的C不是有效的C++。例如,某些关键字在C++中保留,但在C中不保留:

代码语言:javascript
运行
复制
int private = 42;
int class = 7;

C中允许一些类型转换,但C++不允许

代码语言:javascript
运行
复制
char * array = malloc(32);

如果您不知道C++编译器正在编译的是哪种语言,其中任何一个,甚至更多,都会导致fail编译器失败。

票数 6
EN

Stack Overflow用户

发布于 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代码。

票数 4
EN

Stack Overflow用户

发布于 2015-02-17 16:11:50

C和C++是不同的语言,它们有不同的编译器。但是c编译器和c++编译器是兼容的,所以你可以用c++编译器来编译c程序。但是做这件事的好方法是像这样使用外部的"C“(定义__cplusplus在gcc和兼容的编译器中)

YourFile.cpp

代码语言:javascript
运行
复制
#ifdef __cplusplus
extern "C" {
#endif

//Code of your program

#ifdef __cplusplus
}
#endif
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28557242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档