版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础(C语言)东北大学高级语言程序设计课程组课程网站:程序设计基础(C语言)预编译和宏定义3预编译处理命令概述1.概念预编译是在编译前对源程序进行的一些预加工预编译由编译系统中的预处理程序,按源程序中的预处理命令进行2.预编译处理命令
C语言的预编译处理命令均以“#”打头,末尾不加分号预处理命令可以出现在程序的任何位置,
其作用域是从出现点到所在源程序的末尾3.优点:能改善程序设计的环境,
有助于编写易移植,易调试的程序4#define命令进行宏定义一、不带参数的宏定义
1.格式:#define标识符替换文本2.说明:(1)标识符也称宏名,一般用大写字母表示
(2)预处理时将程序中所有的宏名用宏体替换,该过程称“宏展开”;但在程序中用“”括起来的字符串中,即使有的字符串与宏名相同,也不进行替换#defineSIZE20voidmain(){intx;x=
SIZE+15;
printf(“
SIZE=%d\n”,
x);}称为宏体输出结果:SIZE=35称为宏名5(3)宏定义只是一种简单的字符替代,不进行语法检查若将#defineSIZE20
的零写成英文字母‘o’,
程序中的x=
SIZE+15;会替换为x=2o+15;
这时才会发现错误(4)宏定义不是C语句,行末不加分号,
每条宏命令要单独占一行(5)#define命令出现在函数的外部,宏名的有效范围为定义命令之后到本文件结束(6)可以用#undef命令终止宏定义的作用域6(7)宏定义可以嵌套使用
例#defineL10#defineW20#defineSL*W(8)宏定义与变量定义不同,它只作字符替换,
不分配内存空间3.使用宏替换的优点:提高程序的可读性,易于修改二、带参数的宏定义1.格式:#define宏名(形参表)替换文本72.说明(1)宏定义时宏名与括号之间没有空格,
若有空格则会把空格后的所有字符都看成是宏体(2)带参数的宏在替换时,不仅宏名被宏体替换,
同时形参被实参替换(3)建议带运算符的宏体和形参要用()括起来
例#definePI3.14159#defineS(r)PI*r*r
voidmain(){floata,area;a=3.6;area=
S(a);printf(“%f\n”,area);}宏替换:area=3.14159*a*a;8voidmain(){floata,b,area;a=3.6;b=1.2;area=S(a+b);printf(“%f\n”,area);}
#definePI3.14159#defineS(r)PI*r*r宏替换:area=3.14159*a+b*a+b;宏替换:area=3.14159*(a+b)*(a+b);#definePI3.14159#defineS(r)PI*(r)*(r)93.带参数的宏与函数的区别(1)函数调用时,先求出实参表达式的值,再代入形参带参数的宏定义只是进行简单的字符替换(2)函数调用是在程序运行时处理,分配临时的内存单元宏展开是在编译时进行的,在展开时不分配内存单元(3)对函数的形参和实参都要定义类型,且要求一致宏不存在类型问题,宏名无类型,其参数也无类型(4)调用函数只可得到一个返回值,
使用宏可以设法得到几个结果(5)函数调用不会使源程序变长,宏展开会使源程序增长(6)函数调用占用运行时间,
宏展开不占运行时间,只占编译时间10#definePI3.14#defineCIR(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R
main()
{floatr,l,s,v;scanf("%f"&r);
CIR(r,l,s,v);
printf("r=%6.2f,l=%6.2f,S=%6.2f,v=%6.2f\n",r,l,s,v);
}宏展开后:main()
{floatr,l,s,v;
scanf("%f",&r);
l=2*3.14*r;s=3.14*r*r;v=4.0/3.0*3.14*r*r*r;
printf("r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2f\n",r,l,s,v);
}11条件编译1.条件编译:对源程序中的一部分内容在满足一定条件时才进行编译,即对一部分内容指定编译的条件2.条件编译的形式#ifdef标识符程序段1#else
程序段2#endif作用:指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则只编译程序段2
注:#else部分可以没有12(2)#ifndef标识符程序段1#else
程序段2#endif(3)#if表达式程序段1#else
程序段2#endif作用:当表达式的值为真时编译程序段1
否则编译程序段2作用:若指定的标识符没有被#define命令定义过,则编译程序段1,
否则编译程序段213#defineLETTER1main(){charstr[20]="CLanguage",c;inti;i=0;while((c=str[i])!='\0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语-山东省淄博市2024-2025学年第一学期高三期末摸底质量检测试题和答案
- 小学一年级100以内
- 《管饲患者临床护理》课件
- 小学数学五年级下分数混合运算
- 《施工视频截图》课件
- 《管子加工及连接》课件
- 《刑事诉讼法立案》课件
- 广东省深圳市福田区2023-2024学年高三上学期期末考试英语试题
- 《滴眼药水的护理》课件
- 游戏行业技术工作概览
- 东南大学医学三基考试外科选择题及答案
- TZJASE 005-2021 非道路移动柴油机械(叉车)排气烟度 检验规则及方法
- GB/T 31989-2015高压电力用户用电安全
- CB/T 749-1997固定钢质百叶窗
- 大佛顶首楞严经浅释
- 品牌(商标)授权书(中英文模板)
- 行动销售(最新版)课件
- 船舶轴系与轴系布置设计课件
- 学校学生评教表
- 晚宴活动拉斯维加斯之夜策划方案
- 配电室巡检表
评论
0/150
提交评论