1.1 C编译器如何工作
一旦你使用一个文本编辑器写了一个C源文件,你可能会调用一个C编译器将它翻译成机器码,编译器运转在一个包含有源文件和所有通过#include指示符引用进来的头文件的翻译单元中,如果编译器在翻译单元中没有发现错误,它将生成含有机器码的目标文件,目标文件常使用后缀.o或者.obj命名,另外,编译器可能也会生成一个汇编程序列表。
目标文件也叫做模块,一个库,例如C标准库,包含已经编译的、可以立即使用的标准函数模块。
编译器翻译C代码中的每一个翻译单元,每个包含任何头文件的源文件将生成一个独立的目标文件,然后编译器调用连接器,它会将目标文件、使用到的库函数合并成一个可执行程序,Figure 1-1描绘了由几个源文件和库经过编译、连接产生可执行文件的过程,可执行文件也包括目标操作系统加载它时所需要的信息。
1.7.1 C编译器翻译阶段
编译过程涉及8个逻辑阶段,可能编译器会将有些阶段合并,但结果是一样的,这些阶段是:
1. 从源文件中读出字符,如果必要,将转换为源字符集中的字符。行尾指示符与换行符不同,将会被替换,同样的,任何三字母词将被替换为等价的单字符.(但两字母词不会被替换为等价的单字符。)
2. 当一个反斜杠后面紧跟一个换行符时,预处理器将会删除这两个字符;如果仅为一个换行符,将结束一个预处理指示,这个阶段允许你在行尾放置一个反斜杠来继续下一行,例如宏定义中常使用。
注:每一个非空文件,结尾必须有一个换行符
3. 源文件被分解为预处理记号和空白字符序列,每个注释会被当做一个空格处理。
4. 预处理完成,并做宏替换。
注:阶段一到阶段四应用于任何能过#includle指示符添加的文件,一旦编译器实现了预处理指示,它将会从源码的副本中删除。
5. 字符常量和字符串的中字符和序列将会被转换为执行时字符集中等价的字符。
6. 邻近的字符串被连接成一个单独的串。
7. 真正的编译开始执行,编译器分析符号序列,并生成相应的机器码。
8. 连接器解决涉及到的外部对象和函数,生成可执行程序,如果一个模块引用的外部对象或函数没有在任何翻译单元中定义,连接器将从标准库或其他的专用库中找出它们,外部对象和函数在一个程序中不能定义多次。
大多数编译器中,预处理器是一个独立的程序,或者编译器提供配置选项来仅做预处理(阶段一到阶段四为预编译处理序列),这种设置允许你验证你的预处理程序是否有预期的功能。
分享到:
相关推荐
C程序员在编写程序时手头一定要有这本书。在这本书中,C 语言专家 Peter Prinz和Tony Crawford为你提供大量的编程参考信息。全书叙述清晰,语句简洁...Peter 和 Tony 所编写的这本书会成为C语言程序员必备的工作利器!
02H3 C VEPC3200核心网故障处理手册pdf 03H3CBBU3100系列基带处理单元故障处理手册,p 04H3 C VEPC3200产品开局自检手册pdf 05H3 C VMEGW3200技术白皮书pdf 06移动通信技术概述pdf 07H3CEPC3108核心网特性手册(E2123)...
·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。 ·给出了几个指导章节用于帮助新手入门。 ·为php、perl和c语言提供了应用程序编程接口(api)。 ·在每章的api开头部分提供了简要的指南。 ...
C语言核心技术是C语言工程师常用的手册知道,是外文翻译过来的,通俗易懂,适合初学者以及开发人员
目前还没翻译完成,持续更新中,第一次翻译,遇到其中的错误请大家留言提醒,谢谢。
ALIENTEK STM32H750核心板底板 PDF原理图+AD集成封装库+主要器件技术手册: 集成封装库: 3.5TFTLCD封装库.IntLib ATK-4.3' TFTLCD电容触摸屏模块_V1.2.IntLib ATK-4342 4.3寸RGB屏模块封装库.IntLib ATK-7016&7084 ...
迅为iTOP4412核心板配套开发底板ALTIUM设计硬件(原理图+PCB)+核心器件技术手册,2层板设计,大小为192x108mm,双面布局布线,Altium Designer 设计的工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)软件打开...
迅为iTOP4412核心板配套开发底板cadence设计硬件(原理图+PCB)+核心器件技术手册,2层板设计,大小为192x108mm,双面布局布线,cadence 设计的原理图PCB工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)软件...
C++核心编程技术 .rar http://down.qiannao.com/space/file/yuexingchen2/-4e0a-4f20-5206-4eab/C-002b-002b-0020-0020-00b7C-0020-0020vc/C-002b-002b-6838-5fc3-7f16-7a0b-6280-672f-0020.rar/.page C程序100例 ....
这是一套Java核心技术基础使用手册,包含Java 基础核心总结、Java核心基础、Java核心知识、Java 基础面试题总结等,内含最强 Java 核心知识点整理及思维导图,需要的朋友可下载试试! Java是一门编程语言,Java发展...
书名:JSP 2.0 技术手册(电子书) 格式:PDF 出版:电子工业出版社 作者:林上杰、林康司 本书图文并茂,以丰富的实例为引导,全面介绍了主流的 Java Web 开发技术—— JSP 2.0,重点介绍Java在展示层的两项重要技术...
ALIENTEK STM32F750核心板+开发底板PDF原理图+AD集成封装库+主要器件技术手册,ALTIUM集成封装库器件列表: Library Component Count : 63 Name Description ----------------------------------------------------...
STM32F767单片机核心板+开发底板PDF原理图+AD集成封装库+主要器件技术手册:3710FXXX037XXFX01.pdf 3710MXXX046XXFX01.pdf AMS1117.pdf AP3216C.pdf AT24C02.pdf AT8574_8574A_DS001V1.2.pdf CAT6219.pdf CH340.pdf ...
·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。 ·给出了几个指导章节用于帮助新手入门。 ·为php、perl和c语言提供了应用程序编程接口(api)。 ·在每章的api开头部分提供了简要的指南。 ...
H3C S9500系列交换机是H3C公司面向以业务为核心的企业网络架构而推出的新一代核心路由交换机,该产品基于H3C公司自适应安全网络的技术理念,在提供大容量、高性能L2/L3交换服务基础上,进一步融合了硬件IPv6、网络...
ALIENTEK STM32F767(核心板+开发底板)PDF原理图+AD集成封装库+主要器件技术手册,集成封装库部分型号器件列表: AMS1117 AP3216C ALS+PS Sensor ATK-HC05 ATK-HC05 BAT BEEP BUTTON C CAP CH340G USB2UART D DB...
TI基于KeyStone的8核固定浮点数字信号处理器,DSP集成C66x CorePac,每个核心在1至1.25 GHz到10 GHz的运行。
H3C MSR 50系列多业务开放路由器包含MSR 50-40和MSR 50-60两款设备,该系列产品可以为大型分支机构提供高性能、多业务的一体化网络方案,也可以作为大中型企业的核心网络设备,完成数据、语音、视频等多种流量的广域...