- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计实践教程(中)ppt261
C++程序设计实践教程(中) 第7章 编译预处理和程序的多文件组织 7.1 宏定义 7.2 文件包含 7.3 条件编译 7.4 程序的多文件组织 作业:4/7/8 7.1 宏定义 宏定义:用预处理命令#define实现。 宏定义分为: ⑴带参数的宏定义; ⑵不带参数的宏定义。 7.1.1 不带参数的宏定义 格式: #define 标识符 字符或字符串 其中,标识符称为宏名。 举例: #define PI 3.1415926 其作用是将宏名PI定义为字符串3.1415926。在编译预处理时,将该命令后所有出现PI处均用3.1415926替换。这种替换称为“宏替换”或“宏扩展”或“宏展开”。 宏替换的本质是字符串替换。 又如: #define PROMPT 面积为: 例7.2 宏定义的使用。 #includeiostream.h #define PI 3.1415926 #define R 2.8 #define AREA PI*R*R //A #define PROMPT 面积= void main(void) { coutPROMPTAREA\n; } 程序运行结果: 面积=24.6301 不带参宏说明 ⑴通常宏名用大写字母表示,以别于变量名。当然,从语法上来讲,任一合法的标识符均可用作宏名。 ⑵宏定义可出现在程序中的任何位置,但通常放在源程序文件的开始。宏名的作用域从宏定义开始到本源程序文件结束。 ⑶在宏定义中可用已定义的宏名。如例7.2中的A行,在宏定义AREA时,用到已定义的宏名PI和R。在编译预处理时,先对该行中的PI和R作替换。替换后,A行为: #define AREA 3.1415926*2.8*2.8 ⑷宏扩展时,只对宏名作字符串代换,不作任何计算,也不作任何语法检查。若宏定义时书写不正确,会得到不正确的结果或编译时出现语法错误。如: #define A 3+5 #define B A*A coutB\n; //C C行输出为23,而不是64。因C行宏扩展后为: cout3+5*3+5\n; ⑸若要终止宏名的作用域,可用预处理命令: #undef 宏名 例如: #define PI 3.1415926 … #undef PI //终止PI的作用域,其后不能再用PI ⑹当宏名出现在字符串中时,编译预处理不做宏扩展。 例7.3宏名出现在字符串中时的编译预处理。 #includeiostream.h #define A 欢迎 #define B A参观展览会 void main(void) { coutB!\n; } 程序运行结果: A参观展览会! ⑺在同一个作用域内,同一个宏名不允许重复定义。 7.1.2 带参数的宏定义 带参数宏定义的形式: #define 宏名(参数表) 使用参数的字符或字符串 带参宏定义在宏扩展时,要对宏名和参数做替换。 带参数宏举例: #define AREA(a,b) a*b b=AREA(2.0,7.8); 带参宏说明 ⑴宏调用中的实参若含表达式,则在宏定义中要用圆括号把形参括起来或在宏调用中把实参括起来,以免出错。例如: #define AREA(a,b) a*b c=AREA(2+3,3+4); //B c的值不为35,而是15。 ⑵在宏定义时,宏名与左括号之间不能有空格。若在宏名后有空格,则将空格后的所有字符都作为无参宏所定义的字符串,而不作为形参。例如: #define AREA (a,b) (a)*(b) 则编译预处理程序认为无参宏AREA定义为“(a,b) (a)*(b)”,而不将(a,b)作为参数。 ⑶当一个宏定义多于一行时必须使用续行符“\”,即在按换行符(Enter键)之前先输入一个“\”。例如: #define AREA(a,b) (a)*\ (b) ⑷带参宏主要用来取代功能简单、代码短小、运行时间极短、调用频繁的程序代码,但因其使用时有一些副作用,故C++引入内联函数以取代带参宏。 带参宏与函数有些相似,但两者有本质区别 ⑴定义形式不同。宏定义只给出形参,而不指明形参类型;而函数定义必须指定每个形参的类型。 ⑵调用处理不同。宏由编译预处理程序处理,而函数由编译程序处理。宏调用仅作替换,不做任何计算;而函数调用是在目标程序执行期间,先依次求出各个实参的值,然后才执行函数的调用。
您可能关注的文档
最近下载
- 发电机空载特性曲线测录试验报告.pdf VIP
- 济南版八年级下册生物教案全册.doc VIP
- 医学课件-《中国老年骨质疏松症诊疗指南(2025)》.pptx
- 6.2《学会依法办事》教学设计 2025-2026学年统编版道德与法治 八年级上册 .docx VIP
- GJ B 5881-2006 技术文件版本标识及管理要求.pdf VIP
- 剑阁县清江河桅杆水电站增效扩容工程环境影响报告.docx VIP
- GJ B 5873-2006 模压硫化橡胶线性收缩率的测定.pdf VIP
- 国家及行业标准-G-J-B 5882-2006.pdf VIP
- G-J-B 5186.6-2005 数字式时分制指令响应型多路传输数据总线测试方法 第6部分.pdf VIP
- 肾上腺疾病的外科治疗课件.ppt VIP
原创力文档


文档评论(0)