- 1、本文档共57页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11 编译预处理
函数调用和宏调用 函数调用 宏调用 信息传递 实参的值或地址传送给形参。 用实参的字符串替换形参。 内存分配 程序运行时处理,分配临时内存单元。 宏展开在预编译时处理,不存在分配内存的问题。 参数类型 实参和形参类型一致。如不一致,编译器进行类型转换。 作字符串替换,不存在参数类型问题。 返回值 可以有一个返回值。 作字符串替换,不存在返回值问题。 对源程序 无影响。 宏展开后使程序加长。 时间占用 占用程序运行时间。 占用编译时间。 宏定义(cont’d) 宏定义也可用来定义多个语句,在宏调用时,把这些语句又代换到源程序内。 #define SV(s1,s2,s3,v) s1=l*w;s2=l*h;s3=w*h;v=w*l*h; main() {int l=3,w=4,h=5,sa,sb,sc,vv; SV(sa,sb,sc,vv); printf(sa=%d\nsb=%d\n sc=%d\nvv=%d\n,sa,sb,sc,vv); getch(); } 第十讲 编译预处理 概述 宏定义 “文件包含”处理 条件编译 程序应用举例 小结 参考书目及网络资源 讨论时间 “文件包含”处理 所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来。C语言提供了#include命令用来实现“文件包含”的操作。 其一般形式为: #include “文件名“ 或 #include 文件名 “文件包含”处理(cont’d) 在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。 有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。 “文件包含”处理(cont’d) 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。用户编程时可根据自己文件所在的目录来选择某一种命令形式。 #includestdio.h #includemath.h 前者表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。 后者表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录查找。 “文件包含”处理(cont’d) 一个include 命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include 命令。 文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。 从理论上说,#include命令可以包含任何类型的文件,只要这些文件的内容被扩展后符合C语言语法。一般#include命令用于包含扩展名为.h的“头文件”,如stdio.h、string.h、math.h。在这些文件中,一般定义符号常量、宏,或声明函数原型。 “文件包含”处理(cont’d) 被包含的文件与其所在的文件,在预处理后,成为一个文件,因此,如果被包含文件定义有全局变量,在其所在文件中不必用extern关键字声明。但一般不在被包含文件中定义变量。 “文件包含”处理(cont’d) 文件一:文件名为Area.h;文件内容如下: #define PI 3.1415926535 #define S(r) PI*r*r 文件二:文件名为myfile.c;文件内容如下: #include Area.h /*预处理时替换为Area.h*/ void main() { float a, area; a = 5; area = S(a); printf(r=%f\narea=%f\n,a,area); } 在编译时并不是分别对两个文件分别进行编译, 然后再将它们的目标程序连接的。 而是在经过编译预处理后将头文件Area.h包含到主文件中,得到一个新的源程序,然后对这个文件进行编译,得到一个目标(.obj)文件。被包含的文件成为新的源文件的一部分,而单独生成目标文件。 第十讲 编译预处理 概述 宏定义 “文件包含”处理 条件编译 程序应用举例 小结 参考书目及网络资源 讨论时间 条件编译 预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。 条件编译有三种形式: #ifdef 标识符 程序段1 [#else 程序段2] #endif #ifndef 标识符 程序段1 [#else 程序段2] #endif #if 表达式 程序段1 #else 程序段2 #endif 条件编译 如果标识符已被 #define 命令定义过,则对程序段1 进行编译;否则对程序段2进行编译。 如果没有程序段2(它为空),本格式中
文档评论(0)