请描述C语言从源代码到可执行文件的编译流程,具体包含哪几个主要阶段?
考察说明
考查对C语言编译流程各阶段及其作用的掌握程度。
回答思路
- 【回答框架 1】C语言编译过程通常分为四个阶段:预处理、编译、汇编和链接。预处理阶段处理以#开头的指令,如宏替换、文件包含和条件编译,生成纯C代码。
- 【回答框架 2】编译阶段将预处理后的代码翻译成汇编语言,进行词法分析、语法分析、语义分析和优化,生成汇编文件。
- 【回答框架 3】汇编阶段将汇编代码转换为机器指令,生成目标文件(.o或.obj),包含可重定位的机器码和符号表。
- 【回答框架 4】链接阶段将多个目标文件和库文件合并,解析符号引用,分配地址,生成可执行文件。链接分为静态链接和动态链接,静态链接将库代码复制进可执行文件,动态链接在运行时加载共享库。
- 【关键点 1】预处理处理宏、头文件和条件编译,不检查语法错误。
- 【关键点 2】编译阶段生成汇编代码,包含语法和语义分析。
- 【关键点 3】汇编阶段生成目标文件,机器码尚未链接。
- 【关键点 4】链接阶段解决符号引用,生成最终可执行文件。
- 【易错点 1】混淆编译和汇编阶段,汇编只做指令转换,不做语法分析。
- 【易错点 2】忽略链接阶段可能出现的符号未定义或重复定义错误。
- 【易错点 3】误认为预处理会检查语法错误,实际预处理只做文本替换。