- 论坛徽章:
- 0
|
原帖由 ts0612 于 2009-7-11 08:38 发表 ![]()
谢谢各位的回复。
我再细想了一下,那是不是应该是这样子的:
在LCC代码里面只有2种内容:
1、LCC代码开发者自己定义的变量,函数等(自定义的信息)
2、C标准函数库里的函数(如:printf, malloc等,这些由操作系统提供)
最后,用GCC编译器去编译LCC的代码。GCC编译器所做的工作是将LCC代码中自定义的信息(即上面第1点的内容)翻译成汇编语言并设置好“用到的C标准函数库里的函数”的导入声明(即extern语句),然后用汇编编译器编译翻译后的汇编文件,最后经过链接标准函数库里的函数而形成LCC编译器。在整个LCC编译的过程里面,并不依赖C的“资源”(因为标准函数库是操作系统提供的)。
是这样吗?
1)我在前面的回帖并非针对LCC的。我不熟悉LCC。
2)标准的说法,C库函数不属于C本身,或者明确地说:不属于C内核。C开发工具生产商把C编译器、链接器、C库函数,还有一些实用工具打包在一起提供给开发者的。
3)库函数不是由操作系统提供的。操作系统提供的是系统调用。在类UNIX系统里,由于系统与C的特殊关系,系统调用与C库函数的形式是相似的,容易混淆。
4)很多C库函数,里面做一些实质性工作时,其实是调用某些系统调用。譬如,malloc(),在调用过程中,前后两段走的是用户态,中间一段走的是系统态。它调用的是系统调用sbrk()。
5)因为3),你的“最后。。。”可能要重新思考。
[ 本帖最后由 beepbug 于 2009-7-12 05:57 编辑 ] |
|