【问题标题】:Confused about Microsoft C++ offerings and terminology对 Microsoft C++ 产品和术语感到困惑
【发布时间】:2014-02-23 04:29:43
【问题描述】:

自 .Net 出现之前以来,我第一次使用 C++,我对他们的一些 C++ 产品以及他们如何命名感到困惑。

在 .Net 之前,Microsoft 支持一种称为 C++ 的语言,该语言非常接近行业标准。但是当他们引入 .Net 时,他们在 C++ 中添加了很多扩展,并将其称为“托管 C++”。

然后在 2005 年,他们放弃了它并替换为“C++/CLI”,这是一个符合微软(ISO 认证)公共语言基础结构的 C++ 版本,并且有一些语法更改(例如,^ 代替 * 用于指向到 .Net 对象等)。 C++/CLI 可以编译成平台中立的通用中间语言 (CIL)。在运行时,这由公共语言运行时 (CLR) 处理成机器代码。这是来自维基百科的图表: http://en.wikipedia.org/wiki/File:Overview_of_the_Common_Language_Infrastructure.svg

这就是我感到困惑的地方: 在 Visual Studio 2010 Professional 中,我在任何地方都看不到“C++/CLI”一词,尽管这应该是微软提供的。如果我执行 File->New->Project->Other Languages 它让我选择“Visual C++”

1.什么是“Visual C++”,它与 C++/CLI 有什么关系?

在“Visual C++”的顶层,它允许我创建一个“空项目”,在它的项目属性中,公共语言运行时设置为“无公共语言运行时支持”

2.“没有公共语言运行时支持”是否也意味着没有 CLI/CIL,因此没有 C++/CLI 语法?换句话说,该设置的状态是否确定这是“C++/CLI”还是只是普通的旧 unmanaged C++?

在“Visual C++”下面,它还有 CLR 和 General 条目。如果我创建一个 CLR 空项目,我注意到公共语言运行时设置为“公共语言运行时支持 /clr”

3. 这是 Visual C++ 空项目和 Visual C++ CLR 空项目之间的唯一区别吗?

4.什么是Visual C++“常规”空项目?

5.所有这些东西都在某处记录/解释了吗?

编辑:自从发布我的问题后,我注意到它更加复杂。公共语言运行时的默认属性在 CLR 节点下的不同模板上有所不同,从 CLR 到具有“纯”MSIL 的 CLR 到具有“安全”MSIL 的 CLR。这只是一个“公共语言运行时”设置。 Microsoft 是否会在任何地方记录这些模板?

【问题讨论】:

  • 你会注意到我什至没有打开微软 C++/CX 的新蠕虫罐。

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


【解决方案1】:
  1. “没有公共语言运行时支持”是否也意味着没有 CLI/CIL,因此没有 C++/CLI 语法?换句话说,该设置的状态 确定这是“C++/CLI”还是普通的旧非托管 C++?

是的意思。

当您选择“创建新项目”时,您可以选择(类似于)“CLR 控制台应用程序”,它表示 C++/CLI 控制台应用程序。

如果在项目属性中选择选项作为,您也可以创建托管 C++ 控制台应用程序

(类似于)“CLR 支持,旧语法 (/clr:oldSyntax)”(我有俄语版的 MS VS 2010)

【讨论】:

    【解决方案2】:

    Microsoft Visual Studio 上的维基百科文章说:

    Microsoft Visual C++ 是 Microsoft 对 C 和 C++ 的实现 编译器和相关语言服务和特定工具 与 Visual Studio IDE 集成。它可以在 C 中编译 模式或 C++ 模式。对于 C,它遵循 ISO C 标准,部分 C99 规范以及特定于 MS 的添加,形式为 图书馆。 对于 C++,它遵循 ANSI C++ 规范以及 一些 C++11 特性。它还支持 C++/CLI 规范 编写托管代码以及混合模式代码(本机和 托管代码)。 Microsoft 将 Visual C++ 用于开发 本机代码或包含本机和托管的代码 成分。 Visual C++ 支持 COM 以及 MFC 库。为了 MFC 开发,它提供了一组向导用于创建和 自定义 MFC 样板代码,并使用创建 GUI 应用程序 MFC。 Visual C++ 也可以使用 Visual Studio 窗体设计器 以图形方式设计 UI。 Visual C++ 也可以与 Windows 一起使用 API。它还支持使用内部函数,它们是 编译器本身识别的函数,而不是作为 图书馆。内部函数用于暴露 SSE 指令 一套现代 CPU。 Visual C++ 还包括 OpenMP(2.0 版) 规范。

    所以,我可以试着回答你的问题(顺便说一句,这些问题太宽泛了):

    1. Microsoft Visual C++(通常缩写为 MSVC 或 VC++)是 Microsoft 的商业(提供免费版本)集成开发环境 (IDE) 产品,用于 C、C++ 和 C++/CLI 编程语言。它提供用于开发和调试 C++ 代码的工具,尤其是为 Microsoft Windows API、DirectX API 和 Microsoft .NET Framework 编写的代码。
    2. 我会说是的。
    3. 我会说是的,但这本身就是一个很大的不同,即使它是唯一的。
    4. 我不太清楚。我猜一个空的项目是一个旨在让你添加自己的东西的项目。 “一般”可能意味着该项目不属于任何特定类型。
    5. Microsoft 在 MSDN 上有大量文档,但长期以来一直将人们混淆为真正的 C++ 和他们自己的托管 C++ 语言,无论他们今天如何称呼它。 (我一直认为这很糟糕,因为 C++ 就是 C++,而且你的新语言有很多名字,而且他们这样做是为了获得无知的用户。但最后一句话是一个观点,所以它不属于这里。因此是括号。)

    【讨论】:

    • 谢谢;我感谢您的努力,但我认为您只是在发布我的问题之前所做的事情,该问题试图从其他线索中推测合理的答案。我希望有更权威的东西 - 要么是实际使用这些不同版本创建项目并能说出他们实际、现实世界差异的人,要么是来自 Microsoft 的一些官方文档。
    • @user316117:在某种程度上,您要求的是权威的营销发言。不会发生。至于随不同 MSVC++ 版本提供的模板,它们只是起点。相关的开关是/clr,它有7个设置,每个源文件可能不同,甚至可以被#pragma managed逐行覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多