欢迎来到天天文库
浏览记录
ID:5422157
大小:497.00 KB
页数:83页
时间:2017-11-11
《第09章c语言高级程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言程序设计湖南工学院第9章C语言高级程序设计9.1编译预处理命令9.2位运算9.3结构体高级应用-链表本章小结9.1编译预处理命令ANSIC标准规定可以在C源程序中加入一些“预处理命令”,以改进程序环境,提高编程效率。C程序中编译预处理语句的作用不是实现程序的功能,它们是发送给编译系统的信息。也就是说,对于预处理命令,必须在程序编译之前,先对这些特殊命令进行“预处理”。经过预处理后程序不再包含预处理命令了。C语言提供的预处理功能主要有宏定义、文件包含及条件编译三种。分别用宏定义命令,文件包含命令,条件编译命令来实现。为了与一般C语句相区别,这
2、些命令以符号“#”开头。9.1.1宏宏定义功能是定义符号常量和常参数的宏,宏定义编译预处理语句的格式如下:#define字符串1字符串2它把字符串1定义为字符串2,字符串1称为字符串2的宏定义,例如,下面是符号常量的宏定义:#defineON1#defineOFF0它把符号常量ON定义为1,OFF定义为0。符号常量经过宏定义后,就可以在程序中作为常量使用。例如:if(a==ON)printf(“SwitchisON”);elseif(a==OFF)printf(“SwitchisOFF”);在系统执行编译预处理过程时,将把程序中出现的字符
3、串1一律用字符串2置换,就是说程序中的符号常量用定义它们的常量置换,然后再对置换处理后的源文件进行编译。如上面程序段经编译预处理后成为下列形式:if(a==1)printf(“SwitchisON”);elseif(a==2)printf(“SwitchisOFF”);在宏定义语句中,可以使用已经定义过的符号常量定义新的符号常理。例如:#defineWID40#defineLEN(WID+20)其中第二个宏定义中使用了第一个宏定义的符号常量WID。在执行编译预处理时,程序中出现的所有符号常量WID都将被40置换,所有的符号常量LEN不带参
4、数的宏定义:用一个指定的标识符(即名字)来代表一个字符串。一般形式:#define标识符字符串例:#definePI3.14159说明:(1)宏名一般习惯用大写字母表示。(2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。(3)宏定义是用宏名代替一个字符串,也就是作简单的置换,不作正确性检查。(4)宏定义不是C语句,不必在行末加分号.#definePI3.14159;area=PI*r*r;展开:area=3.14159;*r*r;出现语法错误(5)#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文
5、件结束。(6)可以用#undef命令终止宏定义的作用域。格式:#undef宏名(7)在进行宏定义时,可以引用已定义的宏名,可以层层置换。#defineR3.0#definePI3.14159#defineL2*PI*R#defineSPI*R*Rmain(){printf(“L=%fS=%f”,L,S);}(8)对程序中用双括号括起来的字符串内的字符,即使与宏名相同,也不进行置换。(9)宏定义是专门用于预处理命令,只作字符替换。带参数的宏定义:不是进行简单的字符串替换,还要进行对数替换。一般形式:#define宏名(参数表)字符串例:#d
6、efineS(a,b)a*barea=S(3,2)#definePI3.14159#defineS(r)PI*r*rmain(){floata,area;a=3.6;area=S(a);printf(“r=%farea=%f”,a,area);}说明:(1)对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。area=S(a+b)把实参a+b代替PI*r*r中的形参r,成为:area=PI*a+b*a+b则#defineS(r)PI*(r)*(r)都将被(40+20)置换。例如,程序中的下列语句:a
7、rea=LEN*WID;在执行编译预处理时,该语句将被置换成:area=(40+20)*40;经运算后变量area的值是2400。从上面的置换过程可以看到,LEN定义时包围WID+20的圆括号是不可缺少的,若上面的宏定义时不使用圆括号:#defineLENWID+20则上面的area赋值表达式在编译预处理后成为:area=40+20*40;这时变量area的计算结果值是840,它并不是预定的计算结果。因此,在进行宏定义时,为了保证宏定义被置换后仍保持正确的运算顺序,经常在定义式中使用必要的圆括号包围定义的式子。在C语言程序中,宏定义语句除了定义符
8、号常量外,还经常用于定义带参数的宏,带参数的宏是在定义的宏定义中可以带有若干参数。例如:#defineMULT2(X)X*X其中,MUL
此文档下载收益归作者所有