- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 有参宏定义 C程序设计第十讲 说明: (1)带参数的宏展开时,是用实参字符串替换形参字符串,由于运算符的优先级问题,可能发生的逻辑错误。比较好的办法是宏定义的形参加括号。对比下面两个例子: 例一,宏定义:#define S(r) 3.14*r*r 宏调用语句:area = S(a+b); 宏展开后: area =3.14*a+b*a+b; 例二,宏定义: #define S(r) 3.14*(r)*(r) 宏调用语句:area = S(a+b); 宏展开后: area =3.14*(a+b)*(a+b) 有参宏定义 C程序设计第十讲 (2)宏定义时,宏名与参数表间不能有空格,否则将作为无参数宏来处理。如有定义:#define MAX (x,y) xy?x:y 则认为MAX为宏名,而(x,y) xy?x:y为替代字符串,则易产生错误。 (3)带参数的宏和函数有相似之处,都有形参实参的概念,并要求形参实参数目相同,一一对应。但两者实现的过程是不同的。 有参宏定义 C程序设计第十讲 在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。 有参宏定义 C程序设计第十讲 下面通过两个例子来说明它们的区别。 例1 int SQ(int y) { return((y)*(y)); } void main() { int i=1; while(i=5) printf(%d ,SQ(i++)); } 例2 #define SQ(y) ((y)*(y)) void main() { int i=1; while(i=5) printf(%d ,SQ(i++)); } 有参宏定义 C程序设计第十讲 函数调用和宏调用二者在形式上相似,在本质上是完全不同的。现将它们的区别归纳如表所示: 区别项目 函数 宏 信息传递 实参的值或地址传送给形参。 用实参的字符串替换形参。 处理时刻、内存分配情况 程序运行时处理,分配临时内存单元。 宏展开在预编译时处理,不存在分配内存的问题。 参数类型 实参和形参类型一致。如不一致,编译器进行类型转换。 作字符串替换,不存在参数类型问题。 返回值 可以有一个返回值。 作字符串替换,不存在返回值问题。 对源程序的影响 无影响。 宏展开后使程序加长。 时间占用 占用程序运行时间。 占用编译时间。 有参宏定义 C程序设计第十讲 (4)宏定义中,若替换字符串中的形式参数在引号中,则宏展开时不被实参替换。但如果在替换字符串中,形式参数以#作为前缀,那么宏展开时它将被带引号的实参字符串替换,如: #define MYPRINT1(exp) printf(exp=%d\n,exp) #define MYPRINT2(exp) printf(#exp=%d\n,exp) void main() { MYPRINT1(2+3);/*宏展开 print(exp=%d\n,2+3); */ MYPRINT2(2+3);/*宏展开 print(2+3 =%d\n,2+3); */ /*其中字符串被连接起来,即print(2+3=%d\n,2+3); */ } 运行结果如下: exp=5 2+3=5 文件包含命令 #include C程序设计第十讲 所谓“文件包含”,是指一个原文件可以将另外一个原文件的所有内容包含进来。其使用格式为: #include “文件名” 或:#include 文件名 例如,在前面我们已多次用此命令包含过库函数的头文件: #include “stdio.h” /* 包含标准输入输出头文件*/ #include “math.h” /* 包含数学函数头文件*/ #include “string.h” /* 包含字符串处理函数头文件*/ 文件包含命令的功能是在预处理时,把“文件名”指定的文件内容复制到本文件(即是用指定文件的内容去替换# include命令行),再对合并后的文件进行编译。 文件包含命令 #include C程序设计第十讲 main() {… abc(
您可能关注的文档
最近下载
- 内蒙古呼和浩特市2024届小升初考试语文试卷含答案.doc VIP
- 八角嫁接育苗技术规程 DB45_T 2091-2019 广西.pdf VIP
- 《海上作战与三十六计》章节及期末答案-海军潜艇学院.docx VIP
- 人工湿地工程施工方案.docx VIP
- 2023广东湛江市检察机关招聘劳动合同制司法辅助人员(32人)笔试备考题库及答案解析.docx VIP
- GBT24353-2022风险管理指南.docx
- 国开电大学习网《高级财务会计》形考任务答案1-5答案.pdf
- 2023-2024学年山东省日照市高一下期末数学试卷附答案解析.docx
- 建筑图集-08J907 洁净厂房建筑构造.pdf VIP
- (正式版)D-L∕T 766-2013 光纤复合架空地线(oPGW)用预绞式金具技术条件和试验方法.docx VIP
文档评论(0)