- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第07章编译预处理
第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++引入内联函数以取代带参宏。 带参宏与函数有些相似,但两者有本质区别 ⑴定义形式不同。宏定义只给出形参,而不指明形参类型;而函数定义必须指定每个形参的类型。 ⑵调用处理不同。宏由编译预处理程序处理,而函数由编译程序处理。宏调用仅作替换,不做任何计算;而函数调用是在目标程序执行期间,先依次求出各个实参的值,然后才执行函数的调用。 ⑶函数调用要求实参类型必须与
您可能关注的文档
最近下载
- UbuntuLinux操作系统第2版(微课版)钟小平课后习题答案.doc VIP
- 输电线路三跨的经验分享.ppt VIP
- 电动汽车分布式驱动系统动力学分析与优化设计.docx VIP
- 专题1.4数轴与动点经典题型(四大题型)(原卷版+解析).docx VIP
- 幼儿小蝌蚪找妈妈绘本ppt课件.pptx VIP
- 磷酸铁行业现状.docx VIP
- 马克思主义与社会科学方法论课后习题答案(2018版).pdf VIP
- 6.1 树立法治观念 统编版道德与法治八年级上.pptx VIP
- GB_T 43933-2024 金属矿土地复垦与生态修复技术规范.pdf VIP
- 车牌识别系统软件使用说明8.1软件基本设置.pdf VIP
有哪些信誉好的足球投注网站
文档评论(0)