c语言本身提供的语句很少,许多功能是通过什么来实现的
这真是一个好问题!确实C语言提供的语句真的很少,但却能够经过组合编制出即使像操作系统(比如Linux)这样最为复杂的应用程序。那么,这是如何实现的呢? 我们知道C语言是有国际标准的,只有提供了标准中要求的所有标准库以及其中的函数,才能够被称为是C语言的一个实现。 类似的,还有一些其他的标准,也要求C语言编译器的作者提供必要的标准库和函数,因此很多C语言编译器为了能够获得更为广泛的适用性(支持很多国际组织要求的标准)能够提供了能够完成各种功能的标准库和函数。 当然,有些应用程序无法调用这些丰富的标准库函数。比如对于设计操作系统而言,在操作系统加载时,此时运行内核而未无法调用标准库,那怎...全部
这真是一个好问题!确实C语言提供的语句真的很少,但却能够经过组合编制出即使像操作系统(比如Linux)这样最为复杂的应用程序。那么,这是如何实现的呢? 我们知道C语言是有国际标准的,只有提供了标准中要求的所有标准库以及其中的函数,才能够被称为是C语言的一个实现。
类似的,还有一些其他的标准,也要求C语言编译器的作者提供必要的标准库和函数,因此很多C语言编译器为了能够获得更为广泛的适用性(支持很多国际组织要求的标准)能够提供了能够完成各种功能的标准库和函数。
当然,有些应用程序无法调用这些丰富的标准库函数。比如对于设计操作系统而言,在操作系统加载时,此时运行内核而未无法调用标准库,那怎么办?只能靠设计者自己来实现标准库函数,并且在编写程序的过程中进行调用。
比如,Linux源代码中的printk()就是作者实现、替代printf()使用的打印函数。 这里还有些事情不得不说。为什么C语言中有很多功能必须要通过标准库函数来提供?举例来说,为什么连printf()、scanf()这样的基本输入/输出也要通过标准库函数来实现呢? 因为C语言被支持的范围太过广泛了,从PC计算机到嵌入式芯片,从Mac、Linux、Windows到Android,太多不同架构、不同类型的设备和操作系统都能够运行C语言编写的程序。
而这就需要针对不同的软件、硬件分别进行具有针对性的编程和设计。因此很难想象对于I/O操作这类严重依赖于设备的操作如何能够进行标准化的设计,所以只能将影响速度的、无法统一实施的功能设计为依赖于不同软硬件平台的标准库函数来实现了。
综上所述,C语言中精简的指令集数量稀少,但却能够通过组合完成几乎所有的功能,这得益于计算机科学家们在设计计算机指令集时先见之明。当遇到复杂的功能或与设备底层有关的功能时,有人会将其设计为函数库,我们只需要对这些函数进行组合就能构建出复杂的程序。
收起