版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乳蛾护理中的健康教育
- 购买接送学生服务合同
- 物流货架购买合同范本
- 教师办公用品购买合同书
- 购买期房首付签订合同
- 电功车购买合同书范本
- 学校木柴购买合同范本
- 二手游艇购买合同书范本
- 金融财务类题目及答案
- 乙脑患者的心理康复护理
- 四川《装配式复合轻质墙体标准》
- 2026年见证取样员模拟题含答案详解(研优卷)
- 养老机构安全隐患排查治理台账(范本)
- 中信建投:27年钠电平价放量无虞碳酸锂涨价预期加速进程
- 2026年辽宁省直机关公开遴选公务员笔试题及答案解析
- 脑卒中中西医结合防治指南(2026版)
- 新版人教版八年级语文下册名著阅读理解能力测试卷(含试题及答案)
- 2026化工和危险化学品生产经营企业重大生产安全事故隐患自查表
- 新华保险绩效考核制度
- 湖南株洲市攸县2025-2026学年八年级上学期期末学业质量监测物理试卷(试卷+解析)
- 神经内科免疫抑制剂应用
评论
0/150
提交评论