什么是"实施"意味着"实施(in)依赖"?

时间:2018-06-10 04:53:25

标签: c terminology

"实施"意味着"实施(in)依赖"? "实现(in)依赖"之间的区别是什么?和"机器(依赖)"?

我使用C,所以你可以在C中解释它。

2 个答案:

答案 0 :(得分:1)

在C(或C ++)中,“实现”是指编译程序“周围”的软件,例如编译器,标准库等。例如,GCC为x86-64提供了C“实现”,为32位x86和其他几个提供了一个C“实现”。 Microsoft为x86-64,32位x86以及之前的其他一些提供了“实现”。 “依赖于实现”的示例是源代码字符集和编码(例如,程序源中的Unicode支持)。另一个例子是当你#include时找到文件。

“机器”是指硬件,可能是内核的一部分。例如,您可能有一台具有64位指针的计算机,或者一台具有32位指针的计算机。您可能还有一台机器,其中整数运算不是两个补码。那些东西都取决于机器。

答案 1 :(得分:0)

当C标准讨论实现时,它意味着C语言的实现。因此,C的实现是解释和执行C程序所需的所有 1

通常,它包括编译器,附带或兼容的开发人员工具,如链接器和提供支持例程的软件库,操作系统及其组件(如加载程序)和运行它的计算机系统。

在一台计算机系统上,您可以安装多个编译器。你可以有GCC和Clang。当程序使用GCC编译并执行时,即一个C实现,并且当它们使用Clang编译并执行时,即使它们都在同一系统上运行,这是一个不同的C实现。一个C实现是用于翻译和执行C程序的特定完整的东西。

由于C标准没有完全指定您在C程序中编写的所有内容的行为,因此实现之间可能会有所不同。值得注意的是,int中的位数可能会有所不同。这些都与实现有关。

当提到C时,“依赖于机器”的使用通常是在真正意味着“依赖于实现”时语言的不精确使用。机器的功能与C实现的功能之间存在紧密的联系。当有人为只有32位寄存器和32位整数算术指令的机器编写编译器时,他们很可能会设计他们的编译器,使int为32位。但是,这是一个选择。完全可以为32位机器编写编译器,其中int是64位或16位。前者可能更难(因为它们必须通过将单个C算术运算符编译为多个指令来构造64位算术)或浪费(因为在能够进行32位操作的机器上仅执行16位操作不会使用其完整权力),但这是完全可能的。因此,C实现的实际属性是整个实现的一个功能,而不仅仅是它运行的机器。

脚注

1 C标准将“实现”定义为“特定软件集,在特定控制选项下的特定转换环境中运行,执行程序转换,并支持执行在特定的执行环境中起作用“(C 2011 [N1570] 3.12)。然而,当然还需要硬件或至少硬件规范,以便执行或理解由编译器产生的可执行程序。因此,我们可以将实现视为解释和执行C程序所需的一切。

相关问题