您的位置:首页 > 其它

浅谈C文件编译过程

2011-07-29 02:24 232 查看
话说总结下C文件编译过程.

首先假设有这么一段经典C程序:

#include <stdio.h> //包含标准输入输出头文件,stdio即standard input&output

int main(void) //主函数,程序入口点

{

printf("Hello,world!\n"); //标准库输出函数,在屏幕打印"hello world!"(不包括双引号)

return 0; //函数返回0值,一切正常,程序结束

}


首先将上述程序保存为标准的ASCII文本文件hello.c.

于是乎编译之,系统开始这么处理:


预处理器开始介入,对该文件进行预处理,也即文本替换,把#后面的一大堆替换掉,比如上面那程序中第一行的#include <stdio.h>,直接替换成原来stdio.h的内容,然后保存,现在名字变成hello.i了,于是乎编译器介入.

编译器对那hello.i进行编译,把hello.i的内容从C语言翻译成汇编语言的指令,具体怎么做的暂时先不用管,等你学了编译原理就懂了.

接着汇编器汇编上一步生成的汇编语言指令,生成二进制文件,不过只是半成品,因为他还没有链接各种文件中的函数等等,该文件为hello.o.

最后链接器将彼此有关的目标文件进行关联,比如该程序调用了printf函数,则要链接提前单独编译了的printf.o文件,在经过了种种复杂处理,这里最后才生成机器可以直接执行的二进制文件.当然实际情况往往比这还要复杂得多,这里就不作深入探究了.

C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都非常多,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: