- 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
- 中考语文总复习语文知识及应用专题5仿写修辞含句子理解市赛课公开课一等奖省课获奖课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第二课《藏猫猫》精品课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第三课《我向国旗敬个礼》精品课件.pptx
- 高中生物第四章生物的变异本章知识体系构建全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 整数指数幂市公开课一等奖省赛课微课金奖课件.pptx
- 一年级音乐上册第二单元你早全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级数学上册第二章实数27二次根式第四课时习题省公开课一等奖新课获奖课件.pptx
- 九年级物理全册11简单电路习题全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级语文下册第五单元19邹忌讽齐王纳谏省公开课一等奖新课获奖课件.pptx
- 2024年秋季新人教PEP版3年级上册英语全册教学课件 (2).pptx
最近下载
- 盈亏问题精选应用题.pdf
- 《 手缝的基础针法》小学五年级劳动与技术PPT课件.pptx VIP
- 广东省惠州市2025届高三第三次调研考试语文试题及答案.docx
- 2023版GMP指南-厂房设施与设备P(1-300).pdf VIP
- 3、一例肺炎链球菌感染合并间质性肺炎患者的病例讨论.pptx VIP
- a serpina penserete正谱钢琴伴奏谱五线谱.PDF
- 【核心素养】第16课《学先锋做先锋》第2课时课件 2025道德与法治一年级下册.pptx
- 长沙航空职业技术学院单招职业技能测试题库及答案解析.pdf VIP
- 2019年国资委企业绩效评价标准值.pdf VIP
- 2023苏教版科学六年级下册教学计划、教学设计及教学总结(含目录)平铺式.docx VIP
文档评论(0)