C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt

C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt

ID:50084567

大小:279.00 KB

页数:14页

时间:2020-03-08

C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt_第1页
C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt_第2页
C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt_第3页
C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt_第4页
C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt_第5页
资源描述:

《C语言程序设计案例教程 教学课件 作者 沈大林 等 第8章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目录第8章编译预处理8.1【案例32】字符分类●编译预处理的概念●宏定义8.2【案例33】文件包含●文件包含的意义●文件包含的应用8.3【案例34】条件编译 ●条件编译的概念1程序源码8.1【案例32】字符分类8.2【案例33】文件包含8.3【案例34】条件编译28.1【案例32】字符分类案例效果本案例程序在执行时将把用户输入的字符串中的各种字符进行分类,程序运行效果如图8-1-1所示。图8-1-1字符分类在本案例的实现过程中,将学习编译预处理中的宏定义及其应用。设计过程(见书)31.编译预处理的概念相关知识1.编译预处理的概念编译预处理是指在编译系统对文件进行编译(包括词法分析、语法分

2、析、代码生成及优化)之前,对一些特殊的编译语句先进行处理,然后将处理的结果与源程序一起编译,生成目标文件。在前面的学习中,已经见过很多的编译预处理语句,例如:#include"stdio.h"#definePI3.14编译预处理语句都是以“#”开头,其结尾不带分号(;),以表示与普通程序语句相区别。编译预处理语句分为三类:宏定义、文件包含和条件编译,它常用于程序设计的模块化、移植、调试等方面。2.宏定义宏定义分为不带参数的宏定义(即常量定义)与带参数的宏定义两种。(1)不带参数的宏定义不带参数的宏定义形式如下:#define标识符表达式42.宏定义不带参数的宏定义中的表达式可以是任意的常

3、量,例如:#defineNULL0#defineEOF(-1)/*括号不可省略*/#defineTRUE1#defineFALSE0#definePI3.14#defineTEXTunsignedchar/*将unsignedchar类型用TEXT来表示*/#define定义时,不能重复相同的宏名定义。宏定义完成后,在程序编译时将会用后面表达式中的常量去替换宏定义的标识符,例如:while(s!=NULL){…};上面的语句中,在编译预处理时,系统会先将NULL进行替换,语句变成如下形式:while(s!=0){…};在编译预处理完成后,再进行程序的编译。52.宏定义由于编译预处理在这里

4、只是作简单的替换,所以对后边的字符串常量需要加上括号,否则,将会出现错误,例如:#defineA3#defineTA(2+A)main(){…s=3*TA;…}上面是正确的宏定义方式,在编译预处理时会将语句s=3*TA替换为s=3*(2+3)。如果没有括号,则会出现下面所示的错误:#defineA3#defineTA2+Amain(){…s=3*TA;…}在上面的程序段中,编译预处理时会将语句s=3*TA替换为s=3*2+3,由于运算符的优先级不同,导致结果发生错误。62.宏定义编译预处理只是对宏定义的标识符用后面的表达式进行简单替换,而不是对其内容进行解析。(2)带参数的宏定义带参数的

5、宏定义中,宏替换名可以带有形式参数,在程序中用到时,实际参数会代替这些形式参数。带参数的宏定义形式如下:#define宏名(参数表)表达式编译预处理时,系统会将程序中出现宏名和参数表的地方用后边的带参数的表达式进行替换,例如:#definemax(x,y)((x)>(y)?(x):(y))/*参数必须加括号*/如果在程序中有如下调用:a=max(n+b,k+a);系统将会按下面的形式进行替换:a=((n+b)>(k+a)?(n+b):(k+a));/*若不加括号,替换后由于优先级关系极易出错*/在预处理的替换完成后,程序再进行编译。72.宏定义(3)宏的作用范围宏也具有一定的作用范围,默

6、认情况下,宏的作用范围从定义点开始,到程序源文件的末尾。如果要在中途取消宏,可以使用命令#undef取消。例如:#defineA3main(){…#undefA…}上面的程序段中,当执行语句#undefA后,宏定义A将会被取消,如果以后再出现A,系统将会视为一个未定义的变量名。(4)宏定义与函数调用可以看出,带参数的宏定义有些像函数调用,但两者是不同的。带参数的宏定义与函数的区别如下。宏定义仅是对字符串作简单替换,而函数调用则是按程序的含义来替换形式参数。宏定义仅能用于简单的单行语句替换,而函数可用于复杂运算。宏定义仅占用编译时间,不占用运行时间,执行速度快,而函数调用、参数的传递等,都

7、要占用内存开销。82.宏定义宏定义在编译时展开,多次使用会让源程序增大,而函数调用不管多少次总占用相同的源程序空间。宏的作用范围从定义点开始,到程序源文件的末尾或使用命令#undef取消定义之前。总体来说,当语句较简单时,可考虑使用宏定义,从程序执行的速度来说,它优于函数。98.2【案例33】文件包含案例效果本案例程序在运行时将通过对用户定义的包含文件进行调用,并计算圆的周长与面积。程序运行效果如图8-2-1所示。图8-2-1文件包

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

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

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