第六章 §6.1概述 #include stdio.h int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z); void main() { int a,b,c,d; scanf(%d%d%d,a,b,c); d=dif(a,b,c); printf(Max-Min=%d\n,d); } 例6.8: swap1(int x,int y) { int t; t=x;x=y;y=t; } main() { int a[2]={2,4}; printf(“\na[0]=%d,a[1]=%d\n”,a[0],a[1]); swap1(a[0],a[1]); printf(“a[0]=%d, a[1]=%d\n”,a[0],a[1]); } 基本概念 §6.9.1 宏定义 2 带参数的宏定义 §6.9.3 条件编译 (8) 对程序中用双撇号括起来的字符串内的字符,即使与宏名相同,也不进行置换。 (9) 宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,只作字符替换,不分配内存空间。 说明: 作用:不是进行简单的字符串替换,还要进行参数替换。 带参数的宏定义一般形式为: #define 宏名(参数表) 字符串 字符串中包含在括弧中所指定的参数 #define S(a,b) a*b ? area=S(3,2); 程序中用3和2分别代替宏定义中的形式参数a和b,用3*2代替S(3,2) 。因此赋值语句展开为: area=3*2 例: #include stdio.h #define PI 3.1415926 #define S(r) PI*r*r void main() {float a,area; a=3.6; area=S(a); printf(r=%f\narea=%f\n,a,area); } 运行情况如下: r=3.600000 area=40.715038 例6.20 使用带参的宏 赋值语句“area=S(a); ” 经宏展开后为: area=3.1415926*a*a; (1)对带参数的宏展开只是将语句中的宏名后面括号内的实参字符串代替#define 命令行中的形参。 (2) 在宏定义时,在宏名与带参数的括弧之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。 说明: (1) 函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只是进行简单的字符替换。 (2) 函数调用是在程序运行时处理的,为形参分配临时的内存单元。而宏展开则是在编译前进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。 (3) 对函数中的实参和形参类型要求一致。而宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任何类型的数据。 (4) 调用函数只可得到一个返回值,而用宏可以设法得到几个结果。 带参数的宏和函数的区别: #include stdio.h #define PI 3.1415926 #define CIRCLE(R,L,S,V) L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R void main() {float r,l,s,v; scanf(%f,r); CIRCLE(r,l,s,v); printf(r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2f\n,r,l,s,v); } 例6.21 通过宏展开得到若干个结果 建议不在必要时不要使用全局变量,原因如下: ① 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。 ② 使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个外部变量的值。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。 ③它使函数的通用性降低了,因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。 例 6.13 外部变量与局部变量同名 #include stdio.h int a=3,b=5; /* a,b为外部变量*/ a,b作用范围 void main ( ) { int a=8; /*a为局部变量 */ 局部变量a作用范围
您可能关注的文档
- 第01章序列的统计量、检验和分布s资料.ppt
- 第05章生物氧化资料.ppt
- 第05章学习理论概论资料.ppt
- 第1单元-细胞及其分子组成-生物-新课标资料.ppt
- 第5次课外科部分-五官科部分资料.pptx
- 第5单元第2章第三节社会行为1资料.ppt
- 第5单元生物的多样性复习资料.ppt
- 第1讲空气资料.ppt
- 第1讲社会心理学导论资料.ppt
- 第5讲肋片式散热器及冷板设计资料.ppt
- 校园周边流动摊贩对学生健康生活方式的引导策略研究论文.docx
- 高中戏剧教育中的戏剧表演与戏剧教育改革研究论文.docx
- 初中英语课堂沉默现象的应对策略与教学反思论文.docx
- 小学科学社会性议题教学中的科学探究能力培养模式深化与创新研究论文.docx
- 基于真实情境的高中政治议题式教学策略与实践效果评估论文.docx
- 初中生物理实验操作技能提升与教学策略研究论文.docx
- 小学语文与美术教育的跨学科教学实践论文.docx
- 基于游戏化教学的初中英语学困生学习动机激发研究论文.docx
- 小学周边商业环境对学生消费行为的心理机制探究论文.docx
- 探索高中阶段人工智能与数学融合的教学策略论文.docx
最近下载
- 老人三力测试题库及答案解析.docx VIP
- 2025中国制造业企业出海白皮书.pdf VIP
- 融合新闻学课件11VR新闻.pptx VIP
- 呼吸机的使用和维护方法.pptx VIP
- 《中华人民共和国铁路法》培训解读课件.pptx VIP
- 融合新闻学课件10H5新闻.pptx VIP
- 高一物理(人教版)教学课件必修二第五章综合融通(二)抛体运动的综合问题.pptx VIP
- 《基于价值链的比亚迪集团成本控制研究【开题报告+正文】》12000字.docx VIP
- 2024-2025学年度山东信息职业技术学院单招数学能力检测试卷附完整答案详解【典优】.docx VIP
- 学习型组织第五项修炼.ppt VIP
原创力文档

文档评论(0)