程序编译一般有预处理、编译、汇编和链接四个过程,也就是说需要经过这四个过程,我们写的代码,也就是C语言或其它高级语言,即源代码才能变成可运行的可执行文件。
预处理(preprocessing)
在进行编译之前由编译器对源代码进行处理叫做预处理,这个阶段主要是对以#开头的行进行处理,预处理完成后会生成一个.i文件,给下一步的编译使用。
-
展开头文件:#include;
-
宏替换:#define;
-
条件编译:#if、#elif、#else、#ifdef、#ifndef;
-
#defined、#undef、#endif、#error、#pragma、#line、#、##;
-
删除注释;
-
预定义符号常量。
符号常量 | 描述 | 类型 |
---|---|---|
__DATE__ | 引用该符号的语句所在源文件被编译的日期 | 字符串 |
__TIME__ | 引用该符号的语句所在源文件被编译的时间 | 字符串 |
__TIMESTAMP__ | 引用该符号的语句所在源文件被编译的日期和时间 | 字符串 |
__LINE__ | 引用该符号的语句的代码行号 | 整型 |
__FILE__ | 引用该符号的语句的源文件名称 | 字符串 |
__STDC__ | 标识当前是标准的C语言环境 | 整型 |
编译(compile)
编译阶段主要是进行语法检查,检查代码是否规范,即语法分析、语义分析和词法分析,检查无误后生成汇编文件,即.s文件。
汇编(assembling)
汇编阶段就是将汇编文件翻译成机器码(二进制文本),生成目标文件,即.o文件。
链接(link)
链接阶段就是将所有的目标文件打包链接成一个可执行文件。
tips
预处理、编译、汇编这3个阶段,操作的都是单个独立源文件;而链接阶段操作的是所有的源文件。