【问题标题】:When one compiles a `C` file in Visual Studio 2010, is it compiled as a C++ file?在 Visual Studio 2010 中编译“C”文件时,它是否被编译为 C++ 文件?
【发布时间】:2014-03-13 08:16:24
【问题描述】:

C 和 C++ 是不同的语言,我仍然可以在 Visual Studio 2010 的 C++ 项目下编译它们。这是为什么?编译器会将C 文件解释为C++ 吗?

【问题讨论】:

  • 为此使用 /TP 选项

标签: c++ c visual-studio-2010 visual-studio


【解决方案1】:

不,它被编译为 C 代码。

Visual Studio 中的 C++ 项目可以包含 C++ 和 C 代码。 cl 编译器识别文件扩展名并进行相应的编译。

以 .c 结尾的文件被编译为 C 代码。以 .cpp 或 .cxx 结尾的文件被编译为 C++。这可以按照记录的here

进行更改

【讨论】:

    【解决方案2】:

    是的,它被编译为 C++ 文件,除非源文件具有“.C”扩展名

    除了少数例外,C 语法也是有效的 C++ 语法,因此 C 源代码通常会被 C++ 编译器成功编译。

    【讨论】:

      【解决方案3】:

      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++ 编译单元。请注意,您也可以将现成的目标文件包含到您的项目中(通常,成批地称为库)。

      【讨论】:

        【解决方案4】:

        不,它没有编译为 c++,因为 Visual Studio 一次同时支持 c 和 c++。 如果你编译 c 程序,它只编译为 c ...如果你想在一个程序中编译这两个程序,你只需添加 c 和 c++ 的头文件。 (即)#include #include ,如果你同时使用这两个头文件,你可以一次编译这两个程序,也可以在 c++ 中使用 printf scanf,你可以在 c 编程中使用 cin 和 cout .. 谢谢!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多