




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章编译预处理命令,7.1宏定义,7.2文件包含处理,7.3条件编译,“编译预处理”是C语言编译系统的一个组成部分。编译预处理是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。,源程序中的预处理命令均以“#”开头,结束不加分号,以区别源程序中的语句,它们可以写在程序中的任何位置,作用域是自出现点到源程序的末尾。,预处理命令包括执行宏定义(宏替换)、包含文件和条件编译。,7.1宏定义,7.1宏定义,7.1宏定义,一.简单宏定义,C语言的宏定义分为两种:简单宏定义与带参数的定义。,宏定义的目的是允许程序员以指定标识符代替一个较复杂的字符串。,语法形式:,#define标识符字符串,#define为预编译符;,标识符称为“宏名”,通常使用大写英文字母和有直观意义的标识符命名,以区别于源程序中的其它标识符;,字符串构成“宏体”,由ASCII字符集中的字符组成.,宏定义的作用:宏定义后,该程序中宏名就代表了该字符串。,#include#definePRICE500voidmain()floatx,y;scanf(%f,例7-1定义宏PRICE,宏名PRICE代表某商品单价,根据输入的数据求总值。,(2)编译预处理时,将程序中PRICE用500代替,与宏调用的过程相反,这种将宏名替换成字符串的过程称为“宏展开”。,(1)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量,增加程序的可读性,而且用宏名代替不易出错。,7.1宏定义,(3)C语言中,用宏名替换一个字符串是简单的转换过程,不作语法检查。若将宏体的字符串中符号写错了,宏展开时照样代入,只有在编译宏展开后的源程序时才会提示语法错误。例如:,#defineE2.71828,若把字母8写成B,即:,#defineE2.71B2B,预处理时照样替换,而不管其含义是否正确,一直到对宏展开的结果进行编译时,才会产生错误提示。,(4)宏定义命令行放在源程序的函数外时,宏名的作用域从宏定义命令行开始到本源文件结束。,(5)宏名的作用域可以使用#undef命令终止,形式如下:,#undef标识符,(6)在宏定义中,允许在宏体字符串中使用已定义过的宏名,这个过程称为嵌套宏定义。,7.1宏定义,二.带参数的宏定义,1宏定义与调用,#define标识符(形式参数表)字符串,形式参数称为宏名的形式参数,简称形参;,构成宏体的字符串中应该包含所指的形式参数;,宏名与后续圆括号之间不能留空格。,例如,求宏定义形式如下:,宏调用:s1=SQ(5)s2=SQ(x+y)a1=AR(5,3)a2=AR(a+b,b+c),#defineSQ(n)n*n#defineAR(a,b)a*b,7.1宏定义,2宏展开,带参数的宏展开是按#define命令行中指定的字符串从左到右进行置换。如果宏体字符串中包含宏名中的形参,则将程序语句中相应的实参代替形参,如果字符串中的字符不是参数字符,则保留。,例7-2,求a,b,c三个数中最大者。#include#defineMAX(a,b)(ab)?a:bvoidmain()inta,b,c,max;scanf(%d%d%d,462max=6,程序运行结果:,7.1宏定义,但对于以下宏调用语句:s=SQ(p+q)/*原意求(p+q)2*/a=AR(a+b,b+c)/*原意求矩形的面积(a+b)*(b+c)*/按照宏展开的规则,从左到右依次替换宏体中的形参,展开为:s=p+q*p+qa=a+b*b+c,注意:,#defineSQ(n)(n)*(n)#defineAR(a,b)(a)*(b)此时宏展开上述两个宏调用,结果为:s=(p+q)*(p+q)a=(a+b)*(b+c),宏替换是直接替换,7.1宏定义,3带参数的宏与函数的区别,带参数的宏名与函数名相似,都是在宏名或函数名后跟一对圆括号;带参数的宏调用形式与带参数的函数的调用形式类似,都要求实参个数、次序与对应的形参一致。但两者仍然存在着很大的不同。,(1)宏定义与宏调用是为了减少书写量和提高运行速度;而函数定义、函数调用是为了实现模块程序设计,便于构造软件。,(2)宏调用展开后的代码是嵌入源程序中的,且每调用一次,嵌入一次代码。因此,宏调用时总的程序代码是增加的;而函数调用是执行时转入对应的函数,执行后返回主调函数,无论调用多少次,函数体的代码都不会增加。所以函数也解决代码重用问题。,7.1宏定义,(3)宏定义的参数是字符,不需说明类型;而函数定义的参数是数据,不仅要说明其类型,而在调用时必须检查实参与形参在类型上的一致性。具有不同实参的宏调用,经展开后可得到源程序一级的不同代码;而具有不同实参的函数调用,执行后可得到不同的函数值。,(4)宏调用在编译的预处理时完成宏展开;而函数调用在程序运行过程中被执行。(5)除了将宏展开结果嵌入源程序外,宏调用不存在内存分配问题;而对函数可能需分配临时空间以存放函数调用之结果。,7.1宏定义,7.2文件包含处理,编译预处理的文件包含功能是一个源程序通过#include命令把另外一个源文件的全部内容嵌入到源程序中来。,编译预处理程序把#include命令行中所指定的源文件的全部内容放到源程序的#include命令行所在的位置。,在编译时并不是作为两个文件联接,而是作为一个源程序编译,得到一个目标文件。,一.#include命令格式,#include,#include”文件名”,只检索C语言编译系统所确定的标准目录,首先对使用包含文件的源文件所在的目录进行检索,若没有找到指定的文件,再在标准目录中检索。,7.2文件包含,二.#include命令的嵌套使用,例7-4:,当一个程序中使用#include命令嵌入一个指定的包含文件时,被嵌入的文件中还可以使用#include命令,又可以包含另外一个指定的包含文件。,f12.c文件:#include”f1.c”voidmain().,f2.c文件:voidfu2().,f1.c文件:#include”f2.c”voidfu1().,7.2文件包含,7.3条件编译,使用条件编译功能,为程序的调试和移植提供了有力的机制,使程序可以适应不同系统和硬件设置的通用性和灵活性。,一.控制条件为常量表达式的条件编译,功能:,1.单分支结构,#if常量表达式语句#endif,若表达式的值为真(非0),则编译语句,否则语句不被编译。其中语句可为若干C语言合法的语句和(或)命令行。,7.3条件编译,2.双分支结构,#if常量表达式语句1#else语句2#endif,功能:,若表达式的值为真(非0),则编译语句1;否则编译语句2。,3.多分支结构,#if常量表达式1语句1#elif常量表达式2语句2#elif常量表达式n语句n#else语句n+1#endif,7.3条件编译,#include#defineA80voidmain()#if(A=85)printf(%disgreaterthan85n,A);#elif(A=70)printf(%disgreaterthan70n,A);#elif(A=60)printf(%disgreaterthan60n,A);#elseprintf(%dislessthan60n,A);#endif,例7-5,7.3条件编译,二.控制条件为定义标识符的条件编译,#ifdef标识符语句#endif或形式为:#ifdef标识符语句1#else语句2#endif,1#ifdef命令行,若标识符已定义,则编译语句。,若所指标识符已定义,则编译语句1;否则编译语句2。,7.3条件编译,#ifndef
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年逻辑判断小测试题及答案
- 2025玛纳斯县司法局招聘编制外专职人民调解员(5人)考试备考题库及答案解析
- 2025年新能源微电网稳定性控制与智能电网信息安全保障策略研究报告001
- 合肥市政府门户网站信息公开:现状、问题与优化路径
- 合成生物学视角下颠覆性技术识别指标体系的构建与验证研究
- 基于2025年的绿色环保建材市场发展趋势分析报告
- 2025年教师招聘之《小学教师招聘》经典例题及参考答案详解【b卷】
- 2025年教师招聘之《小学教师招聘》考前冲刺练习题(全优)附答案详解
- 教师招聘之《小学教师招聘》综合检测提分(网校专用)附答案详解
- 2025年教师招聘之《幼儿教师招聘》题库附答案详解【模拟题】
- 体育学习兴趣量表
- 国际贸易学课件:关税
- 酒店业中的人工智能培训方案
- 通信工程师中级考试动力环境务实真题及答案近年合集
- 高等职业学校老年服务与管理专业实训教学条件建设标准(征求意见稿)
- 校园超市经营投标方案(技术方案)
- 2024年海宁市通程港口经营有限公司招聘笔试参考题库附带答案详解
- 鼻咽腺样体肥大的影像诊断
- 供应链金融贷款合同
- 眉山医院体检报告
- 养老护理员职业素养
评论
0/150
提交评论