- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[第12章C语言的编译预处理
第12章 C语言的编译预处理
C语言属于高级语言,用C语言编写的程序称为源程序,这种用高级语言编写的源程序计算机是不能直接执行的,必须经过C语言的编译系统把源程序编译成目标程序(机器指令构成的程序)并连接成可执行程序,计算机才可以执行。因此,用C语言来处理问题,必须经过程序的编写→编译及连接→运行三个主要过程。然而,为了减少C源程序编写的工作量,改善程序的组织和管理,帮助程序员编写易读、易改、易于移植、便于调试的程序,C语言编译系统提供了预编译功能。
所谓的预编译功能是指:编译器在对源程序正式编译前,可以根据预处理指令先做一些特殊的处理工作,然后将预处理结果与源程序一起进行编译。
C语言提供的编译预处理功能主要有三种:文件包含、宏定义、条件编译。这三种功能分别以三条编译预处理命令#include、#define、#if来实现。编译预处理指令不属于C语言的语法范畴,因此,为了和C语句区别开来,预处理指令一律以符号“#”开头,以“回车” 结束,每条预处理指令必须独占一行。
12.1 文件包含预处理
“包含”的英文单词为“include”,所谓“文件包含”预处理,就是在源文件中通过“#include”命令指示编译器将另一段源文件包含到本文件中来。
例如,源文件f1.c中有一句“#include ?f2.c?”编译预处理命令,如图12-1(a)所示。编译预处理后文件f1.c的完整结构如图12-1(c)所示。
图12-1 文件包含编译预处理命令
编译时先将f2.c(图12-1(b))的内容复制嵌入到f1.c(图12-1(a))中来,即进行“包含”预处理,然后对调整好的完整的f1.c(图12-1(c))进行编译,得到相应的目标代码。换句话说,由f1.c和f2.c组成程序的目标代码(.obj)和用一个源文件(类似于图c)的目标代码(.obj)完全一样。但是用#include包含f2.c的方式编写程序可以使其他的程序重用f2.c的代码,并且使源文件简洁明了。
“文件包含”指令有两种使用方式:
第一种形式,用尖括号(即小于号?、大于号?)括起被包含源文件的名称:
#include ?文件名?
第二种形式,用双引号括起被包含源文件的名称:
#include ?文件名?
文件名按操作系统的要求定义,可以包括路径信息,例如:
#include ?math.h?
#include ?xyz.c?
#include ?c: \bc\mydir\head2.h?
#include ?文件名?方式常用来“包含”系统头文件。系统头文件一般存储在系统指定的目录中,如Turbo C的include子目录。当C编译器识别出这条#include ?文件名?命令后,它不搜索当前子目录,而直接到系统指定的包含子目录(即include子目录)中去搜索相应的头文件,并将搜索到的头文件的内容“包含”到“主”文件中来。
#include ?文件名?方式常用来“包含”程序员自己建立的头文件。当编译器识别出这条#include ?文件名?命令后,它先搜索“主”文件所在的当前子目录,如果没找到再去搜索相应的系统子目录。
注意,所谓文件包含,指的是在“主”文件源程序中嵌入另一些源程序语句,形成一个完整的源程序去进行编译。所以只能包含源文件而不能去包含目标文件。
如果源文件1中包含源文件2,而源文件2中又包含源文件3,这就是所谓的嵌套包含。
例12.1 将若干个系统头文件包含到本文件中来。
#include ?stdio.h?
#include ?math.h?
#include ?stdlib.h?
void main() {
…
}
其中stdio.h头文件含有与标准输入输出操作有关的函数的原型声明等,如getc、putchar函数;math.h中则是一些数学函数的原型声明;而atoi函数、exit函数等的原型声明在stdlib.h头文件中。这些都是系统头文件,存储在系统指定的include子目录中,所以程序中使用包含命令时用? ?括起头文件名,以便C编译器直接搜索系统子目录,快速寻找到这些头文件。 一条#include命令只能包含一个文件,若要包含多个文件就必须使用多条#include命令。
一个C程序通常由多个源文件组成,每个源文件都是一个可独立编译的程序单位。在将程序分解成多个源文件后,必须计划每个源文件中哪些信息其他文件可见(以源文件形式提供),哪些不可见(以目标代码形式提供)。我们通常的做法是把其他文件可见的信息放在一个称为“头文件(.h)”的源文件中,在需要的文件中用#include预编译指令包括进去。
“头文件”中可以包含哪些代码,不能包含哪些代码?C语言的语法没有强行的规定。根据经验的总结,以下内容放在头文件中比较合适:
(1)
您可能关注的文档
- [CRM系统功能说明.doc
- [回声教学课件1.ppt
- [介词及短语知识点总结.doc
- [介绍英语学习方法.doc
- [从业人员具备的条件.doc
- [CSC2000变电站自动化系统通讯规约.doc
- [从一堂电影赏析课说起1.doc
- [立体化学原理1.doc
- [CPLD原理李荣.doc
- [从书画作品鉴赏之.doc
- 2025年网络文学平台版权运营模式创新与版权保护体系构建.docx
- 数字藏品市场运营策略洞察:2025年市场风险与应对策略分析.docx
- 全球新能源汽车产业政策法规与市场前景白皮书.docx
- 工业互联网平台安全标准制定:安全防护与合规性监管策略.docx
- 剧本杀剧本创作审核标准2025年优化与行业自律.docx
- 2025年新能源电动巡逻车在城市安防中的应用对城市环境的影响分析.docx
- 全渠道零售案例精选:2025年行业创新实践报告.docx
- 2025年网约车司乘纠纷处理机制优化与行业可持续发展报告.docx
- 2025年宠物烘焙食品市场法规政策解读:合规经营与风险规避.docx
- 2025年宠物行业数据安全监管政策影响分析报告.docx
文档评论(0)