关于Microsoft C++产品和术语的困惑

问题描述:

自从pre.Net开始,我第一次使用C++,并且我对他们的一些C++产品以及他们如何命名这些产品感到困惑。关于Microsoft C++产品和术语的困惑

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

然后在2005年,他们放弃了这一点,并用“C++/CLI”取代,该C++版本符合Microsoft(ISO认证)通用语言基础结构,并且有一些语法变化(例如^,而不是*指向.Net对象等)。 C++/CLI可以编译为平台中立的通用中间语言(CIL)。在运行时,通过公共语言运行时(CLR)将其处理为机器代码。下面是来自*的说明图: http://en.wikipedia.org/wiki/File:Overview_of_the_Common_Language_Infrastructure.svg

此处,我感到困惑: 在Visual Studio 2010专业我没有看到所谓“C++/CLI”在任何地方,即使是所谓什么微软提供。如果我做文件 - >新建 - >项目 - >其他语言,它让我选择“Visual C++”

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

在“的Visual C++”的*它让我创建一个“空项目”,并在项目属性吧,公共语言运行库设置为“无公共语言运行库支持”

2。“没有公共语言运行时支持”也意味着没有CLI/CIL,因此没有C++/CLI语法?换句话说,该设置的状态决定了这是“C++/CLI”还是只是普通的旧版本非托管的 C++?

“Visual C++”下面还有CLR和General的条目。如果我做一个CLR空项目中,我注意到,公共语言运行库设置为“公共语言运行库支持/ CLR”

那是一个Visual C++空项目和一个Visual C++ CLR空项目之间的唯一区别?

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

5.所有这些东西记录/解释的地方?

编辑:自发布我的问题以来,我发现它更加复杂。公共语言运行时的默认属性因CLR节点下的不同模板而异,从CLR到CLR的“纯”MSIL到CLR与“安全”MSIL。这就是那个“公共语言运行时间”设置。 Microsoft是否将这些模板记录在任何地方?

+0

你会注意到我甚至没有打开这个新的蠕虫病毒微软C++/CX。 – user316117

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

是的意思。

当您选择“创建一个新项目”时,您可以选择(某事)“CLR控制台应用程序”这意味着C++/CLI控制台应用程序。

您也可以,如果在项目属性中选择选项,

(什么是)“CLR支持,旧语法(/ clr:oldSyntax)”创建托管C++控制台应用程序(我有MS的俄语版VS 2010)

Microsoft Visual Studio*的文章说:

微软的Visual C++是微软执行的C和C++编译器 和 INT相关语言服务和专用工具使用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样板代码,并使用 MFC创建GUI应用程序。 Visual C++也可以用图形方式使用Visual Studio窗体设计器来设计UI。 Visual C++也可以与Windows API一起使用。它还支持使用内部函数,这些函数是由编译器自身识别的功能,并且不作为 库实现。内在函数用于公开现代CPU的一组SSE指令 。 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. 微软在MSDN上有大量的文档,但是在真正的C++和他们自己托管的C++ - ish语言之间混淆了人们的悠久传统,无论他们今天称之为什么。 (我一直认为这很糟糕,因为C++是C++,并且你的新语言有很多名字,并且他们已经完成了这个任务,以获得无知的用户。但是最后一句话是一个意见,所以它不属于这里。因此括号。)
+0

谢谢;我赞赏你的努力,但我认为你只是在发布我的问题之前就做了我所做的事情,这个问题试图从其他线索中*推测出合理的答案。我希望获得更具权威性的东西 - 不管是使用这些不同版本创建项目的人,还是可以讲述他们实际的真实世界差异的人,还是来自Microsoft的官方文档。 – user316117

+1

@ user316117:在某种程度上,你要求权威营销发言。不会发生。至于随不同MSVC++版本发布的模板,它们只是起点。相关的开关是'/ clr',它有7个设置,每个源文件可能有所不同,甚至可以通过'#pragma managed'逐行进行覆盖。 – MSalters