[第12章C语言的编译预处理.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

文档评论(0)

zhuanyewd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档