【问题标题】:What is the difference between ANSI/ISO C++ and C++/CLI?ANSI/ISO C++ 和 C++/CLI 有什么区别?
【发布时间】:2009-12-28 11:39:49
【问题描述】:

以微软为基础创建 其 .NET 技术的共同点 语言基础设施 (CLI) 是一个 ECMA 标准 (ECMA-335) 允许 应用程序要写在一个 各种高级编程 语言并以不同的方式执行 系统环境。符合 CLI 的编程语言具有 访问同一个基类库 并且能够被编译成 相同的中间语言(IL) 和元数据。然后 IL 进一步 编译为本机代码 到特定的架构。

由于这个中间步骤, 应用程序不必 从头开始重写。仅限他们的 IL 需要进一步编译成 系统的本机代码。

系统环境究竟是什么意思?


此外,在学习 Ivor Horton 的Beginning Visual C++ 2008 时,我注意到他说可以使用 Visual C++ 2008 开发根本不同类型的 C++ 应用程序。这些是:

  1. 在个人计算机上本地执行的应用程序,他将其称为本地 C++ 程序。本机 C++ 程序是用 ISO/ANSI 语言标准定义的 C++ 版本编写的。

  2. 还可以编写应用程序,使其在 C++ 扩展版本(称为 C++/CLI)中的 CLR 控制下运行。这些程序被称为 CLR 程序,或 C++/CLI 程序。

那么原生 C++ 程序和 CLR 程序是什么意思呢?他们之间有什么区别?感谢任何专家的帮助。

【问题讨论】:

    标签: c++ c++-cli


    【解决方案1】:

    “系统环境”指的是 Linux、Windows x86、Windows x64 等。请注意它们在段落末尾如何互换使用术语“架构”。


    原生 C++ 程序是您采用标准 (ANSI/ISO) C++ 并将其编译为 .exe 的程序。通常你会为一个特定的环境编译它,例如Windows x86,在这种情况下,它无法在 Linux 下运行,而是在 Windows x64 上的WoW64 emulation layer 下运行。值得注意的是,这段代码直接在机器上运行。

    C++/CLI 是一种不同于标准 C++ 的编程语言。它与 C# 或 VB.NET 一样,运行在 Microsoft 的 Common Language I界面之上。这意味着它可以访问您引用的段落中的所有这些好东西,例如基类库和对 IL 的编译,这允许它在不同的体系结构上运行。但是,就像 C# 和 VB.NET 一样,它不能在机器上本地运行。它需要安装 .NET Framework; .NET Framework 的部分工作是将 C++/CLI 程序转换为本地程序,这意味着它们对机器的直接访问要少得多。

    【讨论】:

    • 顺便说一下,微软的 C 编译器不遵守 ISO C。
    • 我很确定目前没有编译器可以这样做;这感觉像是 OP 不需要担心的细节。
    • 但是 C++/CLI 将如何在不支持 .net 框架(例如 linux)的系统环境中实现。此外,我认为当将标准 C++ 源代码编译为 .exe 时,这意味着程序被编译成机器语言。那么为什么不标准 C++ 取决于每个单独处理器的不同指令架构,而是取决于操作系统的类型??
    • 标准 C++ 依赖于很多东西。您需要知道的不仅仅是目标处理器的指令集来编写一个工作可执行文件。您还需要知道可执行文件的格式,并且您需要知道如何与 OS 交互(读取或写入文件,或将文本打印到控制台都是由 OS 实现的。所以 C++ 应用程序必须要求 OS 去做这些东西)C++/CLI 通过生成适用于任何 CLR 实现的代码来回避这个问题。 .NET 是 Windows 上的一个这样的实现,但 Mono 是另一个,它在 Linux 上运行。
    【解决方案2】:

    我有点生疏了,不记得“本地人”这个词是什么时候出现在常见的用语中的。我相信它被环境设计者大量使用,旨在简化在其他环境之上运行的编程,这些环境旨在提供对系统资源的最佳访问,而对编程风格的关注有限。哪一个可能会随着时间而改变,因为原生也可能是指从用于编程嵌入式系统的高级语言调用的一些汇编代码。这就是为什么我避免使用像 CLI/CLR 这样的操作系统概念,尽管常见的时尚可能在 Linux(Mono)或不支持操作系统的裸芯片(.NET Micro)上实现。

    在这种情况下,标准 C++ 遵循本机方法,并且只要可以为其提供编译器和标准库,它就可以在哪个硬件或操作系统(或无操作系统)上运行它。只要存在 C++ 编译器,标准 C++ 代码就可以很容易地为任何此类平台重新编译。

    要被称为 C++/CLI,C++ 方言实现需要 CLI/CLR 支持,当然还有 CLI 平台,但可以在不使用 CIL 重新编译的情况下移植代码,并使用标准、复杂的库和实用程序。然而,初始要求比标准 C++ 的情况要高,标准 C++ 在这种情况下可以扮演本地环境的角色。

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多