C语言宏定义.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 语言宏定义 define是 C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能 在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生 一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时, 把运行结果理解错误,这对 C 语言的学习很不利。 1 #define 命令剖析 1.1 #define的概念 #define 命令是 C 语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识 符被称为宏名,被定义的字符串称为替换文本。 该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。 (1) 简单的宏定义:#define 宏名 字符串 例:#define PI 3.1415926 (2) 带参数的宏定义:#define 宏名(参数表) 宏体 例:#define A(x) x 一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被 编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替 换。 1.2 宏替换发生的时机 为了能够真正理解#define 的作用,让我们来了解一下对 C 语言源程序的处理过程。当我们在 一个集成的开发环境如 Turbo C 中将编写好的源程序进行编译时,实际经过了预处理、编译、汇编 和连接几个过程,见图 1。 源程序 预处理器 修改后的源程序 编译器 汇编程序 汇编器 可重定位的目标程序 连接器 可执行的目标程序 图1 C语言的编译过程 其中预处理器产生编译器的输出,它实现以下的功能: (1) 文件包含 第 1 页,共 5 页 2011-08-19 可以把源程序中的#include 扩展为文件正文,即把包含的.h 文件找到并展开到#include 所在 处。 (2) 条件编译 预处理器根据#if 和#ifdef 等编译命令及其后的条件,将源程序中的某部分包含进来或排除在 外,通常把排除在外的语句转换成空行。 (3) 宏展开 预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义,即本文所说的#define 的功 能,由预处理器来完成。 经过预处理器处理的源程序与之前的源程序有所不同,在这个阶段所进行的工作只是纯粹的替 换与展开,没有任何计算功能,所以在学习#define 命令时只要能真正理解这一点,才不会对此命 令引起误解并误用。 2 #define 使用中的常见问题解析 2.1 简单宏定义使用中出现的问题 在简单宏定义的使用中,当替换文本所表示的字符串为一个表达式时,容易引起误解和误用。 如下例: 例 1:#define N 2+2 void main() { int a=N*N; printf(“%d”,a); } (1) 出现问题:在此程序中存在着宏定义命令,宏 N 代表的字符串是 2+2,在程序中有对宏 N 的使 用,一般同学在读该程序时,容易产生的问题是先求解 N 为 2+2=4,然后在程序中计算 a 时使用 乘法,即 N*N=4*4=16,其实该题的结果为 8,为什么结果有这么大的偏差? (2)问题解析:如 1 节所述,宏展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符 串,并不会有任何的计算发生,在展开时是在宏 N 出现的地方只是简单地使用串 2+2

文档评论(0)

考试教学资料 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档