版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章预处理命令第11章预处理命令11.1宏定义11.2文件包含命令11.3条件编译命令11.1宏定义宏定义命令是将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。C语言用“#define〞进行宏定义。C编译系统在编译前将这些标识符替换成所定义的字符串。11.1宏定义不带参数的宏定义一般格式如下:#define宏名字符串其中“宏名〞是标识符,“字符串〞是被指定用来替换的字符序列。在程序书写中可用宏名代替对应的字符串。在程序预编译处理时,那么宏名被替换成字符串的过程称为宏代换或“宏展开〞。#defineWORDS〞VisualC++〞#definePI3.141592611.1宏定义说明:〔1〕#define、宏名和字符串之间一定要有空格,宏名一般用大写字母表示,以区别于变量名。〔2〕宏定义要求在一行内写完,如果不能在一行内写完,需要续行符“\〞。#defineLONG_WORDS〞Theseobjectscanberegardedasdatabaserecordsdisplayed\inWebpageswithregularpatterns.〞11.1宏定义11.1.2有带参数的宏定义C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对于带参数的宏来说,不仅可以将宏名替换成相应的内容,还可以将宏名的参数进行替换。带参数的宏定义的一般形式如下:#define宏名(形参表)字符串例如:#defineM(y)y*y+3*y /*宏定义*/k=M(5); /*宏调用*/11.1宏定义#defineMAX(a,b)(a>b)?a:bvoidmain(){intx,y,max;printf("inputtwonumbers:");scanf("%d%d",&x,&y);max=MAX(x,y); /*宏调用*/printf("max=%d\n",max);}11.1宏定义对于带参的宏定义有以下问题需要说明:〔1〕在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予形参,进行“值传递〞。而在带参宏中,只是符号代换,不存在值传递的问题。11.1宏定义〔2〕在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。#defineSQ(y)(y)*(y)#include<stdio.h>voidmain(){inta,sq;printf("inputanumber:");scanf("%d",&a);sq=SQ(a+1);printf("sq=%d\n",sq);}11.1宏定义〔3〕在宏定义中,字符串内的形参通常要用括号括起来以防止出错。在上例中的宏定义中(y)*(y)表达式的y都用括号括起来,因此结果是正确的。 11.1宏定义【例11.2】用带参宏编写一个程序,求三个数中最大者。#include<stdio.h>#definemax2(a,b)(a>b?a:b)#definemax3(a,b,c)max2(a,b)>c?max2(a,b):cvoidmain(){printf(“Max=%d\n〞,max3(3+5,4+2,5+1));}11.2文件包含命令11.2.1文件包含命令──#include所谓“文件包含〞是指将另一个源文件的内容合并到当前程序中。C语言中文件包含用#include命令,预处理后将命令中指明的源程序文件嵌入到当前源程序文件的此命令位置处。文件包含命令格式如下:#include<文件名>或#include"文件名"11.2文件包含命令文件包含可以将指明的文件中的内容直接引入,而不必再重复编写,减少了重复劳动,节省了编程时间。在图11.1中,程序A模块要调用程序B模块,因此在file1.c文件中就声明了包含文件file2.c,(c)图表示编译器进行编译的顺序。使用文件包含命令可以减少程序员的重复编写代码。11.2文件包含命令#include命令中的文件名一般是以.h为扩展名,因而称它为“头文件〞,文件包含的两种格式区别在于:第一种方式称为标准方式,将文件名用“<>〞括起来,用来包含那些由C语言系统提供的并放在C语言系统目录的include子目录下头文件。而第二种方式将文件名用双引号括起来的,用来包含用户自己定义的放在当前目录或其他目录下的头文件或其他源文件。11.2文件包含命令11.2.2多文件结构在开发较大程序时,通常将其分解为多个源程序文件,每个较小的程序用一个源程序文件建立。程序经过建立、编译、连接,成为一个完整的可执行程序。多文件结构通过工程进行管理,在工程中建立假设干用户定义的头文件.h和源程序文件.c。11.2文件包含命令一个多文件系统结构如图11.2所示。filen.hfile2.hfile1.h临时文件1file1.cfile1.objfile2.c临时文件2file2.objfilen.c临时文件nfilen.obj…连接编译运行.libC标准函数库……11.2文件包含命令11.3条件编译命令11.3.1第一种条件编译命令──#ifdef
条件编译命令#ifndef的一般格式如下:#ifdef标识符 程序段1#else 程序段2#endif11.2文件包含命令本格式中的#else可以没有,即可以写成如下形式:#ifdef标识符程序段#endif11.2文件包含命令【例10.4】#ifdef条件编译应用。#defineDEBUG1#include<stdio.h>voidmain(){inta=14,b=15,c;c=a/b;#ifdefDEBUGprintf(“a=%d,b=%d,〞,a,b);#endifprintf(“c=%d\n〞,c);}11.2文件包含命令11.3.2第二种条件编译命令──#ifndef条件编译命令#ifndef的一般格式如下:#ifndef
标识符 程序段1#else
程序段2#endif11.2文件包含命令【例11.4】#ifndef条件编译应用。#defineMAX100#include<stdio.h>voidmain(){#ifndefMAXprintf("Compliedforsmallarray.\n");#elseprintf("Compiledforarraygreaterthan99.\n");#endif}11.2文件包含命令11.3.3第三种条件编译命令──#if条件编译命令#if的一般格式如下:#if常量表达式 程序段1#else 程序段2#endif11.2文件包含命令【例11.5】输入一任意字符串,需将其全部转化为大写字母,或者将其全部转化为小写字母。程序中用条件编译,决定是全部转为大写字母还是小写字母。11.2文件包含命令11.3.4第四种条件编译命令──#if…#elif…#endif条件编译命令#if…#elif…#endif的一般格式如下:#if常量表达式1 程序段1#elif常量表达式2 程序段2……#elif常量表达式n 程序段n#else 程序段n+1#endif11.2文件包含命令【例11.6】分析下面程序的结果。#include<stdio.h>#definek-5voidmain(){#ifk>0printf("k>0");#elifk<0printf("k<0");#elseprintf("k=0");#endif}11.4小结预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的。程序员在程序中用预处理命令来调用这些功能。宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高层次人才引进申请
- 医院体检科体检科室协作工作手册
- 牙医牙齿美白操作规范手册
- 小学研学实践活动组织安全手册
- 生产旺季保产与人员调度工作手册
- 牙科固定正畸诊疗流程手册
- 导师带徒协议书模板企业版二篇
- 2026-2031年中国水路运输行业市场调查研究及发展前景预测报告
- 期末练习(试题)-人教版六年级上册数学
- 2027年四川川东现代职业学院单招职业技能考试模拟试卷及参考答案详解【典型题】
- 机加工标识管理制度
- 都匀三中入学考试题目及答案
- 新任店长述职报告
- 中建通风空调施工组织设计
- 中药饮片临床应用管理制度
- 七年级下册历史期末测试卷含答案
- 生鲜品类提升计划方案
- 高档普采工作面管理课件
- 乙烯装置操作手册
- 鼎捷T100-V1.0-总账管理用户手册-简体
- GB/T 14781-2023土方机械轮式机器转向要求
评论
0/150
提交评论