C语言 defing用法.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语言 defing用法

一. #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) 文件包含 可以把源程序中的#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来代替N,并不会增添任何的符号,所以对该程序展 开后的结果是a=2+2*2+2,计算后=8,这就是宏替换的实质,如何写程序才 能 完成结果为16的运算呢? (3)解决办法:将宏定义写成如下形式 #define N (2+2) 这样就可替换成(2+2)*(2+2)=16 2.2 带参数的宏定义出

文档评论(0)

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

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

1亿VIP精品文档

相关文档