版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章编译预处理1C语言培训教材第6章编译预处理主要内容
编译预处理多文件程序的调试方法条件编译2C语言培训教材第6章编译预处理源文件*.c运行文件*.exe编译编译编译目标文件*.obj连接编译连接连接编译预处理编译编译预处理包括:
宏定义文件包含条件编译6.1编译预处理3C语言培训教材第6章编译预处理6.1编译预处理(续)源文件*.c运行文件*.exe目标文件*.obj编译连接main(){floatr,s,c;scanf(“%f”,&r);s=r*r*3.14;c=2*r*3.14;printf(“s=%f,c=%f”,s,c);}?
如何修改圆周率4C语言培训教材第6章编译预处理#define
宏名
字符串宏定义的功能:
在进行编译前,用字符串原样替换程序中的宏名。这个替换过程称为“宏替换”或“宏展开”,字符串也称为替换文本。
命令的一般格式:6.1.1不带参数的宏定义6.1编译预处理(续)5C语言培训教材第6章编译预处理6.1编译预处理(续)例如:#definePI
3.14main(){floatr,s,c;scanf(“%f”,&r);s=r*r*PI;c=2*r*PI;printf(“s=%f,c=%f”,s,c);}替换3.143.14编译6C语言培训教材第6章编译预处理6.1编译预处理(续)②为了增加程序的可读性,建议宏名用大写字母,其他的标识符用小写字母。③双引号中有与宏名相同的字符串不进行替换。④已经定义的宏名可以被后定义的宏名引用。在预处理时将层层进行替换。说明:①宏定义的作用域是从定义处开始到源文件结束,但根据需要可用undef命令终止其作用域。形式为:
#undef宏名7C语言培训教材第6章编译预处理【例6.1】不带参数的宏定义。源程序:#definePI3.14#defineSPI*r*r#defineV4*S*r/3main(){floatr;printf("\nInputr:");scanf("%f",&r);printf("S=%.2fV=%.2f\n",S,V);}编译预处理后的程序:main(){floatr;printf("\nInputr:");scanf("%f",&r);printf("S=%.2fV=%.2f\n",3.14*r*r,4*
3.14*r*r
*r/3);}SVSV进入编译8C语言培训教材第6章编译预处理命令的一般形式6.1.2带参数的宏定义#define宏名(形参表)
字符串功能:在编译预处理时,把源程序中所有带参数的宏名用宏定义中的字符串替换,并且用宏名后圆括号中的实参替换字符串中的形参。例如:#defineMAX(X,Y)((X)>(Y)?(X):(Y))6.1编译预处理(续)9C语言培训教材第6章编译预处理6.1编译预处理(续)【例6.30】带参数的宏定义。#defineMAX(x,y)((x)>(y)?(x):(y))main(){…printf("%d\n",a,b,MAX(a,b));printf("%d\n",MAX(a+m,b+n));}分两次替换:①将宏名MAX(a,b)
替换成字符串((x)>(y)?(x):(y))。②用实参a替换形参x,实参b替换形参y。程序中的两个printf语句被展开为:printf("%d\n",((a)>(b)?(a):(b)));printf("%d\n",((a+m)>(b+n)?(a+m):(b+n)));10C语言培训教材第6章编译预处理6.1编译预处理(续)【例6.3】分析下面程序运行后的输出结果。#defineMA(x)x*(x-1)main(){inta=1,b=2;printf("%d\n",MA(1+a+b));}分两次替换:
①MA(1+a+b)
用x*(x-1)
替换。②用1+a+b替换x。printf语句被展开为:printf("%d\n",1+a+b*(1+a+b-1));特别注意:由于替换文本中的x没有用括号括起,因此,1+a+b也不能用括号括起。程序输出结果:811C语言培训教材第6章编译预处理6.1编译预处理(续)1.命令的一般形式
格式1:#include<文件名>格式2:#include"文件名"6.1.3文件包含
文件包含是将指定的某个源文件的内容全部包含到当前文件中。用include命令实现。用格式1,预处理程序仅在\TC\INCLUDE目录下查找指定文件。用格式2,预处理程序首先在当前目录中查找指定文件,若找不到再到\TC\INCLUDE目录中查找。12C语言培训教材第6章编译预处理6.1编译预处理(续)例如:调用sin(x)函数时,要在程序的开头使用如下命令:#include<math.h>在预处理时,用math.h文件内容替换#include<math.h>命令行。2.功能在预处理时,将include命令后指定文件的内容替换该命令行。13C语言培训教材第6章编译预处理6.2多文件程序的调试方法操作步骤如下:①在TC环境下建立一个工程文件(扩展名为prj),设文件名为test.prj,文件内容如下:
fiile3.c若这3个文件不在当前盘或当前路径下,需要在文件名前加盘符和路径。如果已经将源文件编译成目标文件,可在工程文件中直接写目标文件名。1.使用工程文件将多个文件连接成一个可执行文件的方法例如:将、和合并成一个可执行文件。14C语言培训教材第6章编译预处理6.2多文件程序的调试方法(续)②在TC主菜单的“Project”下拉菜单中选择“Projectname”项,输入文件名test.prj(文件名前也可以加盘符和路径)。③在TC环境下,按Ctrl+F9,系统首先找到工程文件test.prj,然后将、和分别进行编译,若编译没通过,根据出错信息检查、修改源程序,然后再按Ctrl+F9重新编译。若编译通过,系统自动生成三个对应的目标文件:
、
和fiile3.obj。接着系统自动进行连接,连接成功则生成test.exe并自动执行该程序。15C语言培训教材第6章编译预处理6.2多文件程序的调试方法(续)2.使用文件包含命令将多个文件连接成一个可执行文件的方法16C语言培训教材第6章编译预处理6.2多文件程序的调试方法(续)#include""#include""ABCBCA预处理前预处理后17C语言培训教材第6章编译预处理6.3条件编译实现条件编译的格式有如下三种:格式一:#ifdef宏名 程序段1#else
程序段2#endif条件编译: 是对源程序中的某段程序通过条件来控制是否参加本次编译。18C语言培训教材第6章编译预处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区2025年度电梯维修保养合同2篇
- 2025年度民间担保公司债权转让合同模板4篇
- 二零二五年度特色餐饮品牌合作租赁合同样本4篇
- 二零二五年度汽车报废回收车辆拆解处理合同4篇
- 二零二四年企业知识产权管理体系认证与专利布局合同3篇
- 2025年度建筑项目代理施工与监理合同4篇
- 二零二四年度医疗器械临床试验伦理审查合同6篇
- 2025年度车间安全生产安全管理人员考核合同4篇
- 2025版绿化用水合同管理实施细则范本4篇
- 2025年度厂区绿化工程生态效益分析与评估合同3篇
- 广东省佛山市2025届高三高中教学质量检测 (一)化学试题(含答案)
- 项目可行性研究报告评估咨询管理服务方案1
- 5岁幼儿数学练习题
- 2024年全国体育单招英语考卷和答案
- 食品安全管理制度可打印【7】
- 2024年九年级语文中考名著阅读《儒林外史》考前练附答案
- 抖音丽人行业短视频直播项目运营策划方案
- 2024年江苏扬州市邗城文化旅游发展有限公司招聘笔试参考题库含答案解析
- 小学六年级数学100道题解分数方程
- 社区获得性肺炎护理查房内科
- 浅谈提高中学生历史学习兴趣的策略
评论
0/150
提交评论