配色: 字号:
C语言程序编译过程
2014-04-02 | 阅:  转:  |  分享 
  
编译链接过程:

1.编译过程(以gcc编译器为例)

NOTE:对于VC++6.0来说,编译器为VC,而通过链接器链接之后的可执行代码为xx.exe,其它总体过程是相同的,都包括预处

理,编译,汇编,链接四个过程

图一:gcc编译器编译过程

图二:vc编译链接过程

2.各处理器的具体过程:

1>预编译:

??处理所有的注释,以空格代替

??将所有的#define删除,并且展开所有的宏定义

??处理条件编译指令,#if、#ifdef、#elif、#else、#endif

??处理#include,展开被包含文件

??保留编译器所使用的#pragma指令

2>编译:

??对预处理文件进行一系列词法分析,语法分析和语义分析

1.词法分析:主要分析关键字,标示符,立即数等是否合法

2.语法分析:主要分析表达式是否合法

3.语义分析:在语法分析的基础上进一步分析表达式是否合法

??分析结束后进行代码优化生成相应的汇编代码文件

NOTE:在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C规定,

标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。

1

3>汇编:

??汇编器将汇编代码转变为机器可以执行的指令

??每条汇编指令几乎都对应一条机器指令

NOTE:前边的步骤通常就是我们经常说的编译

4>链接器:

链接器的主要作用:把各个模块之间相互引用的部分处理好,使得各个模块之间能

够正确的衔接.(file1.o和file2.o以及libc.a都为二进制代码)

就像玩拼图,如何完美无缝的将各部分链接在一起才是链接器的本职工作。

链接过程:将你写的程序转换过来的二进制代码和库文件二进制代码组合

静态链接:

动态链接:

2

献花(0)
+1
(本文系Transistor2...首藏)