【发布时间】:2014-03-13 08:16:24
【问题描述】:
C 和 C++ 是不同的语言,我仍然可以在 Visual Studio 2010 的 C++ 项目下编译它们。这是为什么?编译器会将C 文件解释为C++ 吗?
【问题讨论】:
-
为此使用 /TP 选项
标签: c++ c visual-studio-2010 visual-studio
C 和 C++ 是不同的语言,我仍然可以在 Visual Studio 2010 的 C++ 项目下编译它们。这是为什么?编译器会将C 文件解释为C++ 吗?
【问题讨论】:
标签: c++ c visual-studio-2010 visual-studio
不,它被编译为 C 代码。
Visual Studio 中的 C++ 项目可以包含 C++ 和 C 代码。 cl 编译器识别文件扩展名并进行相应的编译。
以 .c 结尾的文件被编译为 C 代码。以 .cpp 或 .cxx 结尾的文件被编译为 C++。这可以按照记录的here
进行更改【讨论】:
是的,它被编译为 C++ 文件,除非源文件具有“.C”扩展名
除了少数例外,C 语法也是有效的 C++ 语法,因此 C 源代码通常会被 C++ 编译器成功编译。
【讨论】:
C 不是 C++,但这两种语言的设计方式是为了保持兼容性。
有一个共同的子集允许编写 .h 文件,该文件可以包含在 C 和 C++ 编译单元中;这取决于语言标准。
更重要的是,虽然标准没有规定,但他们默默地假设在给定的机器上这两种语言将共享一个所谓的 ABI - 应用程序二进制接口。这允许从一种语言到另一种语言的调用。
与 C#、Java 或 VB.Net 等要求将项目的所有文件作为批处理编译的语言不同,C 和 C++ 基于单独编译单元的思想。因此,可以将不同类型(C、C++、Asm)的文件包含到单个项目中。
然而,人们可以从另一个角度来看待它。我有一个 C# 项目,其中一些 C# 源由 T4 生成。我可以将其视为一个项目,其中生成的程序集由 C# 文件组成,但 C# 文件本身可能通过一些准备步骤获得,例如 T4 转换。
同样,您可以将 C++ 项目视为生成的程序集由 object 文件组成的项目,但目标文件 可能 由某些人获得准备步骤,例如编译 C 或 C++ 编译单元。请注意,您也可以将现成的目标文件包含到您的项目中(通常,成批地称为库)。
【讨论】:
不,它没有编译为 c++,因为 Visual Studio 一次同时支持 c 和 c++。 如果你编译 c 程序,它只编译为 c ...如果你想在一个程序中编译这两个程序,你只需添加 c 和 c++ 的头文件。 (即)#include #include ,如果你同时使用这两个头文件,你可以一次编译这两个程序,也可以在 c++ 中使用 printf scanf,你可以在 c 编程中使用 cin 和 cout .. 谢谢!
【讨论】: