C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt

C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt

ID:50320517

大小:189.50 KB

页数:23页

时间:2020-03-08

C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt_第1页
C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt_第2页
C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt_第3页
C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt_第4页
C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt_第5页
资源描述:

《C语言程序设计 第2版 教学课件 作者 李敏第8章 编译预处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章编译预处理C语言程序设计1第八章编译预处理编译预处理:在源程序文件中,加入“编译预处理命令”。使编译程序在对源程序进行通常的编译之前,先对这些特殊的命令进行“预处理”,然后将预处理的结果和源程序一起再进行通常的编译处理,以得到目标代码(.obj文件)。所有编译预处理命令都是以“#”打头,单独占源程序中的一行,一般放在源程序的首部。合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。源文件*.c运行文件*.exe目标文件*.obj编译连接编译预处理编译第八章编译预处理8.1宏定义8.2文件包含8.3条件编译第八章编译预处理宏定

2、义的作用是用标识符来代表一串字符。一旦进行了宏定义,在程序中就可以用相应的标识符代表该串字符。C编译系统在编译之前将程序中的标识符替换成字符串,这称为宏展开。宏定义是由源程序中的宏定义命令来完成的。宏展开是由预处理程序自动完成的。8.1宏定义#define标识符字符串宏定义的功能:在进行编译前,用字符串原样替换程序中的宏名。这个替换过程称为“宏替换”或“宏展开”,字符串也称为替换文本。格式:1.不带参数的宏定义例如:#definePI3.14159用标识符PI来代替3.141598.1宏定义例如:#definePI3.14main(){floatr,s,c;s

3、canf(“%f”,&r);s=r*r*PI;printf(“s=%.2f”,s);}替换3.148.1宏定义说明:1)宏名要符合标识符的命名规则,通常采用大写。2)宏定义使用宏名代替一个字符串,只是做简单的置换,并不做正确性检查。只有宏展开后,程序进行编译时才进行语法检查。3)宏定义不是C语句,在行尾不用加分号。如果加了分号,会将分号看成字符串的一部分,一起置换。8.1宏定义4)宏定义语句出现在程序中函数的外面,宏名的有效范围为宏定义命令之后到源文件结束。可以使用#undef命令来提前终止宏名的作用域。例如:PI的有效范围#definePI3.14159ma

4、in(){……}#undefPIdel(){……}#undefPI的功能是使PI的作用范围到这一行结束,因此在del函数中PI就不能再代表3.14159了。8.1宏定义PI的有效范围5)宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。例如:#defineMIN100main(){printf("MIN=%d",MIN);}前面的MIN在引号里面,不替换,后面的MIN要替换,所以输出结果为:MIN=1008.1宏定义格式:2.带参数的宏定义#define宏名(形参表)字符串功能:在编译预处理时,把源程序中所有带参数的宏名用宏定义中的字符串替换,并且用宏

5、名后圆括号中的实参替换字符串中的形参。带参宏的调用格式:宏名(实参表)8.1宏定义例如:#defineL(a,b)2*(a+b);宏定义,其中的a、b是形参length=L(2,3);宏调用,其中的2、3是实参length=2*(2+3);带参宏定义的宏展开:按#define语句中指定的字符串从左到右替换。如果字符串中包含宏中指定的形参(如a、b),则将程序语句中相应的实参(2、3)值传递过去。如果宏定义中的字符串中的字符不是参数字符(如2*(a+b)中的2、*、+等),则保留。8.1宏定义【例8-2】带参宏定义的应用示例。#definePI3.14159#d

6、efineL(r)2*PI*rmain(){floata,length;a=5.5;length=L(a);/*宏展开为:2*3.14159*5.5*/printf("r=%.2flength=%.2f",a,length);}程序运行结果:r=5.50length=34.568.1宏定义说明:1)带参宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。例1:宏定义:#defineS(a,b)a*b宏调用:c=S(2+3,3+4)宏展开后的语句:c=2+3*3+4最终c的值为15例2:宏定义:#defineS(a,b)(a

7、)*(b)宏调用:c=S(2+3,3+4)宏展开后的语句:c=(2+3)*(3+4)最终c的值为358.1宏定义2)宏定义时,在宏名与参数的括号之间不应加空格,否则将空格以后的字符都作为字符串的一部分。#defineL(r)2*PI*rL是宏名,而替代的字符串是"(r)2*PI*r"。3)在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值,要用它们去替换形参(只是符号替换),因此必须作类型说明。8.1宏定义8.2文件包含文件包含是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。一般形式:#

8、include<文件名>或:#incl

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

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

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