欢迎来到天天文库
浏览记录
ID:39963269
大小:245.00 KB
页数:61页
时间:2019-07-16
《c语言基础第12章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第12章C语言的预处理器12.1宏定义和宏替换12.2文件包含12.3条件编译编译预处理命令不是C语言的语句,它的作用只是告诉(命令)编译系统,在编译源程序之前对源程序进行某种预加工,而后再进行编译。所有的编译预处理命令都是以符号“#”开头,末尾不加分号。预处理命令可以用在程序的任何地方。本章主要介绍以下的C语言的编译预处理命令:宏定义的命令:#define,#undef;文件包含命令:#include;条件编译命令:#if_#else_#endif;#if_#elif_#endif;#ifdef_#else_#endif;#ifndef_#else_#endif。12.1宏定义和宏替换12.
2、1.1不带参数的宏定义和引用不带参数的宏定义的一般形式为:#define宏名字符序列宏定义的作用是,在对源程序编译之前,将程序中出现的所有的宏名用对应的字符序列来代替。这种替换称宏替换或宏引用。不带参数宏替换,通常的用途是,用宏名定义程序中的常量,如:#defineFALSE0#defineWORDS"TurboC++"通常把宏定义写在文件的开始部分,函数的外面,或写在包含文件(#include)中。例12.1.1宏定义与宏替换应用。程序定义了一个宏名:SIZE,用来定义数组str的容量。程序中还使用了系统定义的一个宏名NULL(空字符),用于检查字符型数组中字符串的结束符。程序的功能是,将用
3、户输入的字符串存入数组str,然后,变成大写字母将其输出。程序如下:#include"stdio.h"#defineSIZE80/*宏定义SIZE*/main(){inti;charstr[SIZE];/*宏SIZE的引用*/printf("Enterastring:");gets(str);for(i=0;str[i]!=NULL;i++)/*宏NULL的引用*/printf("%c",toupper(str[i]));printf("");return;}宏替换的另一个常见的应用,是语句串的替换。也就是用一个宏名代表一组C语句。编译时,凡是程序中遇到这个宏名,就用这些语句代替。这相当于
4、调用无参数的函数。例12.1.2求1~num之间的质数的程序。程序中使用了如下的C语句宏定义:#definePRIMEfor(i=2;i5、",n);if(!(++k%5))printf("");}}printf("");return0;}宏定义可以嵌套进行。也就是说,在定义宏时,可以引用已有定义的宏名,实现层层替换。例如:#definePI3.14159#defineSPI*r*r#defineL2*S/r其中定义S时,使用了已定义的PI;定义L时,使用了已定义的S。例12.1.3应用上面嵌套结构的宏定义,计算圆的面积和周长。程序如下:#include"stdio.h"#definePI3.14159#defineSPI*r*r#defineL2*S/rmain(){floatr;printf("Enterr:");sc6、anf("%f",&r);printf("r=%ftS=%ftL=%f",r,S,L);return;}程序输出举例(带下划线的数据是用户输入的):Enterr:1r=1.000000S=3.141590L=6.283180需要注意的是,这个程序的语句printf("r=%ftS=%ftL=%f",r,S,L);中,两次出现S和L:在格式字符串中出现了S和L,在输出项列表中也出现了S和L。C语言规定,宏名出现在字符串中时,将不看作是宏名,因而也不做宏替换。所以才有如上所示的输出。例12.1.4将宏用于输出语句中的例子。#include"stdio.h"#definePRNpri7、ntf/*定义宏*/#defineD"%d"#defineF"%f"#defineS"%s"main(){inti=10;floatf=20.0;charch[]="string.";PRN(D,i);PRN(F,f);PRN(S,ch);return;}程序的运行结果为:1020.000000string.12.1.2带参数的宏定义和引用带参数的宏定义的一般形式为:#define宏名
5、",n);if(!(++k%5))printf("");}}printf("");return0;}宏定义可以嵌套进行。也就是说,在定义宏时,可以引用已有定义的宏名,实现层层替换。例如:#definePI3.14159#defineSPI*r*r#defineL2*S/r其中定义S时,使用了已定义的PI;定义L时,使用了已定义的S。例12.1.3应用上面嵌套结构的宏定义,计算圆的面积和周长。程序如下:#include"stdio.h"#definePI3.14159#defineSPI*r*r#defineL2*S/rmain(){floatr;printf("Enterr:");sc
6、anf("%f",&r);printf("r=%ftS=%ftL=%f",r,S,L);return;}程序输出举例(带下划线的数据是用户输入的):Enterr:1r=1.000000S=3.141590L=6.283180需要注意的是,这个程序的语句printf("r=%ftS=%ftL=%f",r,S,L);中,两次出现S和L:在格式字符串中出现了S和L,在输出项列表中也出现了S和L。C语言规定,宏名出现在字符串中时,将不看作是宏名,因而也不做宏替换。所以才有如上所示的输出。例12.1.4将宏用于输出语句中的例子。#include"stdio.h"#definePRNpri
7、ntf/*定义宏*/#defineD"%d"#defineF"%f"#defineS"%s"main(){inti=10;floatf=20.0;charch[]="string.";PRN(D,i);PRN(F,f);PRN(S,ch);return;}程序的运行结果为:1020.000000string.12.1.2带参数的宏定义和引用带参数的宏定义的一般形式为:#define宏名
此文档下载收益归作者所有