问题:在阅读TheCProgrammingLanguage的K&R版时,在[Introduction,page3]中看到这样的说法:因为C语言提供的数据类型和控制结构可以直接被大多数计算机系统所支持,所以实现自包含程序所需的运行时文件一般都非常小。这个黑体字表示什么?你能举个例子来说明C语言中的某种数据类型或控制结构是不直接被某个计算机系统支持的吗?答:其实C里面有一些数据类型是不直接支持的。在许多嵌入式系统中,硬件中没有浮点单元。因此,如果编写如下代码:floatx=1.0f,y=2.0f;返回x+y;可以转换为以下形式:unsignedx=0x3f800000,y=0x40000000;返回_float_add(x,y);然后编译器或标准库必须提供'floatadd()'的具体实现,它占用嵌入式系统中的内存空间。按照这个来计算一个微系统(译者注:也就是微嵌入式系统)中代码的实际字节数,你也会发现有增加。另一个常见的例子是64位整数(C语言标准中的'longlong'类型从1999年就没有出现过),它不能直接在32位系统上使用。古董SPARC系统不支持整数乘法,因此必须在运行时提供乘法的实现。当然,还有其他例子。其他编程语言比其他语言有更复杂的原始类型。例如,Lisp中的符号需要大量的运行时实现支持,就像Lua中的表、Python中的字符串、Fortran中的数组等等。C中的等效类型通常不是标准库的一部分(C没有标准符号或表),或者更简单并且不需要那么多运行时支持(C中的数组基本上是指针,以NULL结尾的字符串实现起来也很简单)。控制结构异常处理是C语言中没有的控制结构。只有两种类型的非本地退出,'setjmp()'和'longjmp()',它们只能保存和恢复处理器状态的某些部分。相比之下,C++运行环境必须先遍历函数调用栈,然后调用析构函数和异常处理函数。via:stackoverflow作者:DietrichEpp译者:KayGuoWhu校对:wxy
