c语言程序设计李鸿编译预处理

c语言程序设计李鸿编译预处理

ID:8806627

大小:82.50 KB

页数:5页

时间:2018-04-08

c语言程序设计李鸿编译预处理_第1页
c语言程序设计李鸿编译预处理_第2页
c语言程序设计李鸿编译预处理_第3页
c语言程序设计李鸿编译预处理_第4页
c语言程序设计李鸿编译预处理_第5页
资源描述:

《c语言程序设计李鸿编译预处理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、C程序设计备课笔记第九章编译预处理编译指令(编译预处理指令):C源程序除了包含程序命令(语句)外,还可以使用各种编译指令(编译预处理指令)。编译指令(编译预处理指令)是给编译器的工作指令。这些编译指令通知编译器在编译工作开始之前对源程序进行某些处理。编译指令都是用“#”引导。编译预处理:编译前根据编译预处理指令对源程序的一些处理工作。C语言编译预处理主要包括宏定义、文件包含、条件编译。编译工作实际分为两个阶段:编译预处理、编译。广义的编译工作还包括连接。宏定义文件包含条件编译编译预处理连接编译9、1宏定义宏定义:用标识符来代表一个字符串(给字符串取个名字)。C语言用“#def

2、ine”进行宏定义。C编译系统在编译前将这些标识符替换成所定义的字符串。宏定义分为不带参数的宏定义和带参数宏定义。#define标识符字符串9、1、1不带参数宏定义(简单替换)1、不带参数宏定义格式:其中:标识符-宏名。2、宏调用:在程序中用宏名替代字符串。3、宏展开:编译预处理时将字符串替换宏名的过程,称为宏展开。#definePI3.14main(){floatr=3,s,c;宏调用s=PI*r*r;c=2*PI*r;printf(r,s,c);}main()宏展开{floatr=3,s,c;s=3.14*r*r;c=2*3.14*r;printf(r,s,c);}宏定义

3、,其中PI宏名:代表3.14例如:5C程序设计备课笔记说明:(1)宏名遵循标识符规定,习惯用大写字母表示,以便区别普通的变量。(2)#define之间不留空格,宏名两侧空格(至少一个)分隔。(3)宏定义字符串不要以分号结束,否则分号也作为字符串的一部分参加展开。从这点上看宏展开实际上是简单的替换。例如:#definePI3.14;展开为s=3.14;*r*r;(导致编译错误)(4)宏定义用宏名代替一个字符串,并不管它的数据类型是什么,也不管宏展开后的词法和语法的正确性,只是简单的替换。是否正确,编译时由编译器判断。例如:#definePI3.I4照样进行宏展开(替换),是否正

4、确,由编译器来判断。(5)#define宏定义宏名的作用范围从定义命令开始直到本源程序文件结束。可以通过#undef终止宏名的作用域。#defineE2.71828宏名E的有效范围,代表串2.71828main(){fun();printf(“%f”,E);}#undefE宏名E的有效范围,代表”abc”#defineE“abc”fun(){char*s=E;printf(“%s”,s);}#deinePI3.14#defineR3.0#defineL2*PI*R#defineSPI*R*Rmain(){printf(“L=%f,S=%f”,L,S);}(6)宏定义中,可

5、以出现已经定义的宏名,还可以层层置换。(7)宏名出现在双引号“”括起来的字符串中时,将不会产生宏替换。(因为出现在字符串中的任何字符都作为字符串的组成部分)(8)宏定义是预处理指令,与定义变量不同,它只是进行简单的字符串替换,不分配内存。5C程序设计备课笔记(1)使用宏的优点:l程序中的常量可以用有意义的符号代替,程序更加清晰,容易理解(易读)。l常量值改变时,不要在整个程序中查找,修改,只要改变宏定义就可以。比如,提高PI精度值。l带参数宏定义比函数调用具有更高的时间效率,因为相当于代码的直接嵌入。(空间效率:多次调用占用空间较多,一次调用没有什么影响)。9、1、1带参数宏

6、定义类似函数头,但是没有类型说明,参数也不要类型说明。#define宏名(参数表)字符串带参数宏定义不只是进行简单的字符串替换,还要进行参数替换。1、带参数宏定义的格式:例如:#defineS(a,b)a*b其中S-宏名,a,b是形式参数。程序调用S(3,2)时,把实参3,2分别代替形参a,b。area=S(3,2);=>area=3*2;2、带参数宏定义展开规则:在程序中如果有带实参的宏定义,则按照#define命令行中指定的“字符串”从左到右进行置换(扫描置换)。如果串中包含宏定义中的形参,则将程序中相应的实参代替形参,其它字符原样保留,形成了替换后的字符串。注意:还是一

7、个字符串的替换过程,只是将形参部分的字符串用相应的实参字符串替换。宏展开:a,b用i,j替换,其它照抄例9-1:用带参数宏定义表示两数中的较大数#defineMAX(a,b)(a>b)?a:bmain(){inti=15,j=20;printf(“MAX=%d”,MAX(i,j));=>printf(“MAX=%d”,(i>j)?i:j);}注意:(1)正因为带参宏定义本质还是简单字符替换(除了参数替换),所以容易发生错误。例如:5C程序设计备课笔记#defineS(a,b)a*b程序中area

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。