




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第6章编译预处理,2005年3月,2,主要内容,编译预处理多文件程序的调试方法条件编译,2005年3月,3,源文件*.c,运行文件*.exe,编译,编译,编译,目标文件*.obj,连接,编译,连接,连接,编译预处理包括:宏定义文件包含条件编译,6.1编译预处理,2005年3月,4,6.1编译预处理(续),main()floatr,s,c;scanf(“%f”,?,如何修改圆周率,2005年3月,5,#define宏名字符串,宏定义的功能:在进行编译前,用字符串原样替换程序中的宏名。这个替换过程称为“宏替换”或“宏展开”,字符串也称为替换文本。,命令的一般格式:,6.1.1不带参数的宏定义,6.1编译预处理(续),2005年3月,6,6.1编译预处理(续),例如:,#definePI3.14main()floatr,s,c;scanf(“%f”,替换,3.14,3.14,编译,2005年3月,7,6.1编译预处理(续),为了增加程序的可读性,建议宏名用大写字母,其他的标识符用小写字母。双引号中有与宏名相同的字符串不进行替换。已经定义的宏名可以被后定义的宏名引用。在预处理时将层层进行替换。,说明:宏定义的作用域是从定义处开始到源文件结束,但根据需要可用undef命令终止其作用域。形式为:,#undef宏名,2005年3月,8,【例6.1】不带参数的宏定义。,源程序:#definePI3.14#defineSPI*r*r#defineV4*S*r/3main()floatr;printf(nInputr:);scanf(%f,编译预处理后的程序:main()floatr;printf(nInputr:);scanf(%f,S,V,S,V,2005年3月,9,命令的一般形式,6.1.2带参数的宏定义,#define宏名(形参表)字符串,功能:在编译预处理时,把源程序中所有带参数的宏名用宏定义中的字符串替换,并且用宏名后圆括号中的实参替换字符串中的形参。,例如:#defineMAX(X,Y)(X)(Y)?(X):(Y),6.1编译预处理(续),2005年3月,10,6.1编译预处理(续),【例6.30】带参数的宏定义。#defineMAX(x,y)(x)(y)?(x):(y)main()printf(%dn,a,b,MAX(a,b);printf(%dn,MAX(a+m,b+n);,分两次替换:将宏名MAX(a,b)替换成字符串(x)(y)?(x):(y)。用实参a替换形参x,实参b替换形参y。程序中的两个printf语句被展开为:printf(%dn,(a)(b)?(a):(b);printf(%dn,(a+m)(b+n)?(a+m):(b+n);,2005年3月,11,6.1编译预处理(续),【例6.3】分析下面程序运行后的输出结果。#defineMA(x)x*(x-1)main()inta=1,b=2;printf(%dn,MA(1+a+b);,分两次替换:MA(1+a+b)用x*(x-1)替换。用1+a+b替换x。printf语句被展开为:printf(%dn,1+a+b*(1+a+b-1);,特别注意:由于替换文本中的x没有用括号括起,因此,1+a+b也不能用括号括起。,程序输出结果:8,2005年3月,12,6.1编译预处理(续),命令的一般形式格式1:#include格式2:#include文件名,6.1.3文件包含,文件包含是将指定的某个源文件的内容全部包含到当前文件中。用include命令实现。,用格式1,预处理程序仅在TCINCLUDE目录下查找指定文件。用格式2,预处理程序首先在当前目录中查找指定文件,若找不到再到TCINCLUDE目录中查找。,2005年3月,13,6.1编译预处理(续),例如:调用sin(x)函数时,要在程序的开头使用如下命令:#include在预处理时,用math.h文件内容替换#include命令行。,2功能在预处理时,将include命令后指定文件的内容替换该命令行。,2005年3月,14,6.2多文件程序的调试方法,操作步骤如下:在TC环境下建立一个工程文件(扩展名为prj),设文件名为test.prj,文件内容如下:file1.cfile2.cfiile3.c若这个文件不在当前盘或当前路径下,需要在文件名前加盘符和路径。如果已经将源文件编译成目标文件,可在工程文件中直接写目标文件名。,1.使用工程文件将多个文件连接成一个可执行文件的方法,例如:将file1.c、file2.c和file3.c合并成一个可执行文件。,2005年3月,15,6.2多文件程序的调试方法(续),在TC主菜单的“Project”下拉菜单中选择“Projectname”项,输入文件名test.prj(文件名前也可以加盘符和路径)。在TC环境下,按Ctrl+F9,系统首先找到工程文件test.prj,然后将file1.c、file2.c和file3.c分别进行编译,若编译没通过,根据出错信息检查、修改源程序,然后再按Ctrl+F9重新编译。若编译通过,系统自动生成三个对应的目标文件:file1.obj、file2.obj和fiile3.obj。接着系统自动进行连接,连接成功则生成test.exe并自动执行该程序。,2005年3月,16,6.2多文件程序的调试方法(续),2.使用文件包含命令将多个文件连接成一个可执行文件的方法,2005年3月,17,6.2多文件程序的调试方法(续),file3.c,#includefile2.c#includefile3.c,file1.c,A,file2.c,B,C,B,C,A,file1.c,预处理前,预处理后,2005年3月,18,6.3条件编译,实现条件编译的格式有如下三种:格式一:#ifdef宏名程序段1#else程序段2#endif,条件编译:是对源程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 九年级语文上册 第五单元 20 香菱学诗教学设计 (新版)新人教版
- 人教A版 (2019)必修 第二册7.3 复数的三角表示教学设计及反思
- 二年级上册美术教学设计-17 纸线绳小浮雕-苏少版
- 优化班级小组建设的16个策略
- 人教部编版17 难忘的泼水节教学设计及反思
- 人教版七年级上册第二单元 第一课大洲和大洋教学设计6
- 2024云南省有色地质局三0八队下属企业招聘24人笔试参考题库附带答案详解
- 人教版八年级历史与社会上册1.1.1古代埃及教学设计
- 2024中赣核生态环境集团(江西)有限公司招聘14人笔试参考题库附带答案详解
- 2025年高中历史(2022版)课程标准考试测试卷及答案(共5套)
- 湖北省武汉市2025届高中毕业生四月调研考试语文试卷及答案(武汉四调)
- 分娩镇痛后护理
- 2025年河南交通职业技术学院高职单招职业适应性测试历年(2019-2024年)真题考点试卷含答案解析
- 实践基地挂牌协议书
- 2025年上海高考语文三轮复习之默写
- 【9数一模】2025年安徽省合肥市蜀山区九年级中考一模数学试卷(含答案)
- 数学-河南省湘豫名校联考2024-2025学年高三下学期春季学期第二次模拟考试(湘豫二模)试题和答案
- 多媒体应用设计师技能考核试题试题及答案
- 2024-2025学年浙江省宁波市东钱湖九校初三5月小二调考英语试题含答案
- 中央2025年中国残联直属单位招聘26人笔试历年参考题库附带答案详解
- 2025年无锡市锡山环保能源集团招聘笔试参考题库含答案解析
评论
0/150
提交评论