- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计(第四版)第6章编译预处理课件
第六章 编译预处理;6.1 文件包含;【说明】
1、一个include命令只能指定一个被包含文件,若要包含多个,必须要用多条include预处理命令。
2、文件包含可以嵌套。例如,若文件1中包含文件2,而文件2中又包含文件3,则可在文件1中用两条include预处理命令分别包含文件2和文件3,但文件3应出现在文件2之前。; 3、在文件包含预处理命令中,文件名用双引号和尖括号括起来是有区别的:
(1)若双引号括起来,则系统先在引用被包含文件的C源程序所在的文件目录中查找,若找不到,再按系统指定的标准方式寻找其它目录。
(2)若用尖括号括起来,则系统仅查找按标准方式指定的目录。;6.2 宏定义;6.2.1 不带参数的宏定义;【例6-1】
#define PI 3.14159
main()
{ float l,s,r,v;
printf(“Input radius:”);
scanf(“%f”,r);
l=2.0*PI*r;
s=PI*r*r;
v=3.0/4*PI*r*r*r; printf(“L=%10.2f\nS=%10.2f\nV=%10.2f\n”,l,s,v);
} ;【说明】
1、通常#define命令出现在文件的开头,宏名的有效范围为定义命令之后到本文件结束。用#undef命令也可终止宏定义。
2、宏名习惯上用大写字母表示,以便与变量名相区别。
3、宏定义是用宏名替换一个指定的字符串,也就是作简单的置换,不做正确性检查。
4、宏定义不是C语句,不必在行末加上分号。若加了分号,则会连分号一起进行置换。
5、在进行宏定义时,可以引用已定义的宏名,可以层层置换。例如: ;#define R 3.0
#define PI 3.1415926
#define L 2*PI*R
#define S PI*R*R
#include stdio.h
main()
{ printf(“L=%f\nS=%f\n”,L,S);}
运行结果如下:
L=18.849556
S=28.274333
经过宏展开后,printf函数中的输出项L被展开为2*3.1415926*3.0,S被展开为3.1415926*3.0*3.0。 ; 6、对程序中用双引号括起来的字符串内的字符,即使与宏名相同,也不进行置换。如上例中printf函数 “L=%f\nS=%f\n”格式控制字符串中的“L”和“S”是不进行置换的。
7、使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。增强程序的可读性和可靠性。;6.2. 带参数的宏定义; 在宏展开时,预处理程序用S(3,4)中的3和4分别替换宏定义中的x和y,即用3*4替换S(3,4),因此上面语句展开后为:
area=3*4;
请看下面例子:
【例6-2】
#define MAX(a,b) (ab)?a:b
#include stdio.h
main()
{ int x,y,max;; printf(input two numbers: );
scanf(%d%d,x,y);
max=MAX(x,y);
printf(max=%d\n,max);
}
运行结果如下:
input two numbers:15 30
max=30;【说明】
1、带参数的宏定义中,宏名和参数表之间不能有空格出现。否则将空格以后的字符都作为替换字符串的一部分。例如:
#define S(x,y) x*y
若写成:
#define S (x,y) x*y
在宏展开时,S被替换成“(x,y) x*y”字符串了。
2、对带参数的宏定义的展开只是将语句中的宏名后面括号内的实参字符串替换定义中的形参。例如,对于以下宏定义:; #define S(x,y) x*y
语句: area=S(3+5,6-2);宏展开的形式为:
area=3+5*6-2;
area=31;
这个结果可能与程序设计者的意愿:(3+5)*(6-2)不相符。为了得到(3+5)*(6-2)这个结果,应当在宏定义时,在字符串中的参数修面加上一对括号,即:
#define S(x,y) (x)*(y)
这样在宏展开时即可以得到(3+5)*(6-2)的结果了。 ; 3、带参数的宏定义与函数调用的区别
有些记者容易把带参数的宏定义与函数调用相混淆。的确,之间有一定类似之处,在函数调用时也是在函数名后的括弧内写上实参,也实参与形参的数目相等。但带参数的宏定义与函数调用是不同的。主要有:
(1)函数调用时,先求出实参表达式的值,然后将实参的值复制一份传递给形参。而带参
您可能关注的文档
- 管理会计(中国人民大学 孙茂竹)第5章课件.ppt
- 管理体系上岗培训课件.ppt
- 管理会计串讲课件.ppt
- 管理信息系统第07章-2 代码设计课件.ppt
- 管理信息系统UC矩阵等课件.ppt
- 管式除尘除雾器调试说明课件.ppt
- 管理会计PPT串讲课件.ppt
- 管理会计第二章(下)课件.ppt
- 管理学作业—广告公司课件.ppt
- ch6 实验与准实验课件.ppt
- 2025届衡阳市第八中学高三一诊考试物理试卷含解析.doc
- 2025届湖南省娄底市双峰一中等五校重点中学高三第二次诊断性检测物理试卷含解析.doc
- 天水市第一中学2025届高三第二次联考物理试卷含解析.doc
- 2025届金华市重点中学高三考前热身物理试卷含解析.doc
- 2025届北京市石景山区第九中学高三第四次模拟考试物理试卷含解析.doc
- 江苏扬州市2025届高三第一次模拟考试物理试卷含解析.doc
- 2025届江苏省南通市高级中学高考物理五模试卷含解析.doc
- 广东省清远市华侨中学2025届高三第一次调研测试物理试卷含解析.doc
- 辽宁省凤城市2025届高三第五次模拟考试物理试卷含解析.doc
- 内蒙古巴彦淖尔市重点中学2025届高考仿真卷物理试卷含解析.doc
最近下载
- 武汉市2025届高中毕业生二月调研考试(二调)数学试卷(含官方答案).pdf
- 著名建筑案例分析精品课件.ppt
- 中国冠状动脉左主干分叉病变介入治疗指南.pdf VIP
- 血液净化技术的操作并发症及处理.docx VIP
- 《认识东南西北》-完整版PPT课件.pptx
- 2025年黄河水利职业技术学院单招职业技能测试题库及答案(必刷).docx VIP
- 义务教育语文课程标准(2022年版)考试题库含答案 .docx VIP
- 2025年烟台汽车工程职业学院高职单招职业技能测验历年参考题库频考版含答案解析.docx
- TED 女孩不必完美,而必要勇敢.pdf
- 2.3中国的耕地资源与粮食安全 课件 (35张PPT).pptx VIP
文档评论(0)