欢迎来到天天文库
浏览记录
ID:41357984
大小:276.56 KB
页数:28页
时间:2019-08-22
《《预处理定义》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章预处理命令本章要点宏定义文件包含条件编译主要内容9.1宏定义9.2“文件包含”处理9.3条件编译(4)经过预处理后的程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。(5)为了与一般C语句相区别,预处理命令以符号“#”开头。预处理命令的特点(1)用于改进程序设计环境,提高编程效率。(2)它不是C语言本身的组成部分,不能直接对它们进行编译(因为编译不能识别它们)。(3)必须在对程序进行通常的编译(包括词法和语法分析、代码生成、优化等)之前,先对程序中这些特殊的命令进行“预处理”,即根据预处理命令
2、对程序作相应的处理。如:⑴程序中用#define命令定义了一个符号常量A,则在预处理时将程序中所有的A都置换为指定的字符串。⑵程序中用#include命令包含一个文件“stdio.h”,则在预处理时将stdio.h文件中的实际内容代替该命令。§9.1宏定义(1)㈠不带参数的宏定义用一个指定的标识符(即名字)来代表一个字符串。其一般形式为#define标识符字符串⑴宏定义使用户能以一个简单的名字代替一个长的字符串。⑵这个标识符成为“宏名”。⑶在预编译时将宏名替换成字符串的过程称为“宏展开”。⑷#define是宏定义命令§9.1宏定义(2)#include
3、#definePI3.1415926voidmain(){floatl,s,r,v;printf(“inputradius:”);scanf(“%f”,&r);l=2.0*PI*r;s=PI*r*r;v=4.0/3*PI*r*r*r;printf(“l=%10.4fs=%10.4fv=%10.4f”,l,s,v);}inputradius:4↙l=25.1327s=50.2655v=268.0826§9.1宏定义(3)⑴宏名一般习惯用大写字母表示,以便与变量名区别,但这并非规定,也可用小写字母。⑵使用宏名代替一个字符串,可
4、以减少程序中重复书写某些字符串的工作量,同时也避免书写字符串出错。另外,可以通过改变#define命令行来更改宏名所代表的字符串。⑶宏定义是用宏名代替一个字符串,也就是作简单的置换,不作正确性检查,即预编译时不作任何语法检查。⑷宏定义不是C语句,不必在行末加分号,如果加了分号则连分号一起进行置换。⑸#define命令出现在程序函数的外面,宏名的有效范围为定义命令之后到本源文件结束。如:定义数组大小,可以用#definearray_size1000intarray[array_size];当该程序在另外一个场合中,需要定义更长的数组,则只要更改#defi
5、ne命令行即可实现,即改为#definearray_size2000在该场合下array_size所代表的是2000,使用宏定义,可以提高程序的通用性。一个宏定义如下:#definePI3.141s9在宏替代时,不会指出该宏是错误的,只有在编译的时候,才会提示在使用宏的行存在语法错误。§9.1宏定义(4)⑹可以用#undef命令终止宏定义的作用域。⑺在进行宏定义时,可以引用已定义的宏名,可以层层置换。⑻对程序中用双撇号括起来的字符串内的字符,即使与宏名相同,也不进行置换。⑼宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,只作字符替换,
6、不分配内存空间。作用域:#defineG9.8voidmain(){┇}#undefGf1(){┇}G的有效范围#include#defineR3.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rvoidmain(){printf(“L=%fS=%f”,L,S);}展开后为:printf(“L=%fS=%f”,2*3.1415926*3.0,3.1415926*3.0*3.0);L=18.849556S=28.274333§9.1宏定义(5)㈡带参数的宏定义带参数的宏定义不
7、是进行简单的字符串替换,还要进行参数替换。其一般形式为#define宏名(参数表)字符串字符串中包含在括号中所指定的参数。对带参数的宏定义是这样展开置换的:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换。如果串中包含宏中的形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参。如果宏定义中的字符串中的字符不是参数字符,则保留。定义一个a和b为边的矩形面积的宏:#defineS(a,b)a*b┇area=S(3,2);展开后为:area=3*2;§9.1宏定义(6)#include#defi
8、nePI3.1415926#defineS(r)PI*r*rvoidmain(){floata
此文档下载收益归作者所有