- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第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语言的语法没有强行的规定。根据经验的总结,以下内容放在头文件中比较合适:
您可能关注的文档
- 第3章多媒体艺基础.ppt
- 第4讲 民间传与非物质文化遗产1.ppt
- 第6章 多媒CAI课件制作综合实例.ppt
- 第6章 函数与处理习题解答.doc
- 第08章--博论和信息经济学.ppt
- 第8章电子商务础.ppt
- 第9-1课 编预处理.doc
- 第11章 图与证明(教案).doc
- 第13课卤族元.doc
- 第16章 理念行为.ppt
- 2025江苏省大学生乡村医生专项计划招聘49人备考题库附答案详解.docx
- 2025河北沧州河间招聘警务辅助人员50名备考题库及答案详解(易错题).docx
- 2025西咸新区泰和医院招聘备考题库(20人)及完整答案详解.docx
- 2025重庆綦江区人民政府文龙街道办事处公益性岗位招聘1人备考题库含答案详解.docx
- 2025浙江杭州市拱墅区祥符街道招聘编外聘用人员备考题库附答案详解(典型题).docx
- 2025浙江台州温岭市总工会招聘社会化职业化工会工作者1人备考题库及答案详解(全优).docx
- 2025湖南省选调生选拔1200人备考题库及答案详解(各地真题).docx
- 2025湖北宜昌当阳市面向招聘社区工作者21人备考题库及答案详解(易错题).docx
- 2025浙江金华市市场监督管理局所属事业单位金华市食品药品检验检测研究院招聘2人备考题库及一套答案详.docx
- 2025江苏镇江市消防救援支队招录政府专职消防员32人备考题库附答案详解(模拟题).docx
最近下载
- 国有企业采购管理规范.docx VIP
- YBT5194-2024 改质沥青-报批稿.pdf VIP
- 基于地理学科核心素养的高中地理学生综合思维能力培养策略研究教学研究课题报告.docx
- 快速康复外科讲课PPT课件.pptx
- 铝粉浆安全技术说明书.pdf VIP
- TYNESS 003-2024 工业企业环境风险双重预防机制建设技术指南 污染源辨识与分级.pdf VIP
- DL T 1506-2016 高压交流电缆在线监测系统通用技术规范.pdf VIP
- 邮轮英语中职课件.pptx
- 新时代中国特色社会主义与实践(2024版)课后思考题答案.docx
- 深化产教融合协同:XX学校“十五五”校企合作发展规划.docx VIP
原创力文档


文档评论(0)