【问题标题】:How to know if a project is C or C++ in Visual Studio?如何在 Visual Studio 中知道项目是 C 还是 C++?
【发布时间】:2013-03-11 00:15:27
【问题描述】:

Visual Studio 如何知道项目是 C 还是 C++?是否有任何配置或构建参数表明这一点?

VS 对 C 使用 C 编译器,对 C++ 使用 C++ 编译器吗?

【问题讨论】:

  • 文件结尾。以.c 结尾的文件被编译为C 文件。但是,编译器的 C 模式不是很符合标准,甚至不完全支持 C99 标准(已经 14 岁了)。
  • 我在同一个项目中混合使用 C 和 C++ 的经历很糟糕。
  • @JoachimPileborg 它不要求 C99 支持。是 C89。
  • @DavidHeffernan 这就是我的观点。如果你想要一个好的和最新的 C 编译器,你不会使用 VS 中的那个。

标签: c++ c visual-studio compiler-construction


【解决方案1】:

VS 对 C 使用 C 编译器,对 C++ 使用 C++ 编译器吗?

没有

cl 编译器足够聪明,可以知道(基于文件扩展名)文件是 .cpp 还是 .cc 文件 - 它认为是 C++ 文件。而cl 编译器会将.c 文件视为C 程序源文件,并进行相应的编译。虽然它确实加载了一个单独的dll 文件来编译CC++ 文件。但这是实现定义的。

但是,有一个开关可以根据文件扩展名覆盖cl 的行为。

要编译为 C++ 源文件(即使扩展名为 .c),命令为: cl /TP yourfile.c 请注意,该文件应包含有效的 C++ 代码。

要编译为 C 源文件(扩展名为 .cpp),命令为: cl /TC yourfile.cpp 请注意,该文件应包含有效的 C 代码。

【讨论】:

  • 项目设置还将允许对所有文件强制使用 C++ 或 C。
  • cl 是否也遵循 gcc 扩展?即.c 是C 文件而.C 是C++ 文件?
  • 不,@Mike,Windows 文件系统不区分大小写。并且cl 将遵循相同的:-)
  • @DrewDormann 是的,如果我是对的,nmake 中有一个设置。但我几乎不使用 nmake - 我在整个项目中都使用cl。在 perl 中使用构建文件
  • 是的,我知道 Windows 不区分大小写,但这并不意味着他们无法检查文件扩展名是否区分大小写;但当然,这意味着微软必须考虑交叉兼容性,我知道这要求太多了。 :)
【解决方案2】:

除了扩展,如果你去File Properties->Advanced,还有一个Compile As选项,可以用来显式地把代码当作C代码。

它为 C++ 生成 /TP,为 C 生成 /TC

正如 Joachim 在 cmets 中指出的那样,VC++ 并不是地球上最符合标准的编译器,因此选择“任何可行的”实际上可能是一个合理的选择。

【讨论】:

    【解决方案3】:

    没有 C 或 C++ 项目。任何项目都可以混合有 C、C++ 和其他语言文件。

    目前尚不清楚您期望第二个问题的答案是什么。 C 语言使用 C 编译器编译,C++ 语言使用 C++ 编译器编译。很难想象还有哪些其他情况是可能的。这两个编译器可能会或可能不会被实现为单个可执行程序,但这是一个相当无趣的微小细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2015-09-19
      • 1970-01-01
      • 2011-07-12
      • 2013-06-29
      相关资源
      最近更新 更多