-c语言课件第8章

PPT
  • 阅读 54 次
  • 下载 0 次
  • 页数 17 页
  • 大小 98.012 KB
  • 2022-11-13 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档10.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
-c语言课件第8章
可在后台配置第一页与第二页中间广告代码
-c语言课件第8章
可在后台配置第二页与第三页中间广告代码
-c语言课件第8章
可在后台配置第三页与第四页中间广告代码
-c语言课件第8章
-c语言课件第8章
还剩5页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 17
  • 收藏
  • 违规举报
  • © 版权认领
下载文档10.00 元 加入VIP免费下载
文本内容

【文档说明】-c语言课件第8章.ppt,共(17)页,98.012 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-7158.html

以下为本文档部分文字说明:

本章主要内容1.掌握无参宏定义和带参宏定义的方法。2.掌握文件包含命令的形式和文件包含的实现过程。3.掌握条件编译命令的形式及嵌套。第8章编译预处理C提供的预处理功能主要有以下三种:宏定义文件包含条件编译所有的预处理语句均以“#”开头,占用一个单独

的书写行,语句的结尾不用分号“;”结束。8.1宏定义8.1.1无参数宏定义无参数宏定义的一般形式:#define标识符字符串(常量或代码串)例:#definePI3.1415926作用:用PI来代表“3.1415926”。以一个简单的名字代替长的符

号串。称这个标识符为“宏名”,在编译时将宏名替换成字符串的过程称为“宏展开”。#define是宏定义命令。例:从键盘输入字符(个数不多于100),欲统计输入字符中英文字母的个数。注:输入字符‘#‟时,或输入字符个数多于100时,输入结束。#include"stdio.h"#defineMAX

100main(){intn,count=0;charch;for(n=0;n<MAX;n++){ch=getchar();if(ch==‟#‟)break;if(ch>=‟a‟&&ch<=‟z‟||ch>=‟A‟&&

ch<=‟Z‟)count++;}printf("Thenumberofletters:%d\n",count);}无参宏定义说明:为了使宏名和变量名相区别。通常宏名用大写字母表示。符号常量不仅可以定义常数,也可以定义字符、字符串、

说明符号。如:#defineENDSTRING„\0‟如果程序中用双引号括住的字符串内包含与符号常量有相同的名字,预编译时并不进行宏替换。如:#defineBOOK“TheRedandTheBlack”main(){printf("%\ns",BOOK);}运行结果:The

RedandTheBlack如果将程序改为:#defineBOOK“TheRedandTheBlack”main(){printf("%\ns",“BOOK”);}运行结果:BOOK无参宏定义说明(续):宏定义语句的末尾不必加分号。例如:#defineMAXIM

UM20;错误……if(max==MAXIMUM)break;经过宏展开后,其中的if语句变为:if(max==20;)break;显然,上述if语句存在语法错误。在字符串中若出现运算符,通常需在合适的位置加括号。例如:#defineS(3

+4)可以用#undef命令取消宏定义。一般形式:#undef标识符8.1.2带参宏定义带参宏定义的一般形式:#define标识符(形参表)字符串其中,形参表是由一个或多个形参组成。带参宏调用的一般形式:

宏名(实参表);例:编写一个程序,求3个数中的最大数,要求用带参数的宏实现。#include<stdio.h>#defineMAX1(a,b)((a)>(b)?(a):(b))#defineMAX2(a,b,c)(

MAX1(a,b)>(c)?MAX1(a,b):(c))main(){inta=23;printf("MAX=%d\n",MAX2(13+5,4,a));}带参数的宏与函数有本质上的区别:①函数在定义和调用中

所使用的形参和实参都受数据类型的限制,而带参数宏的形参和实参可以是任意数据类型。②函数有一定的数据类型,且数据类型是不变的。而带参数的宏一般是一个运算表达式,它没有固定的数据类型。③函数调用时,先计算实参表达式的值,然后带入形参。而宏定义展开时,只是替换。④函数调用是在程序

运行时处理的,将分配临时的存储单元。而宏扩展是在编译时进行的,展开时即不分配内存单元,不传递值,也没有“返回值”的概念。⑤使用宏次数多时,宏展开后源程序增长,而函数调用不使源程序变长。使用带参数的宏,应注意:1.对于宏定义的形参要根据需要加上圆括号,以免发生运算错误。#defi

neMULTI(x)((x)*(x))……a=15;b=3;p=MULTI(a+b)*10;经过预编译,该赋值语句变为:p=((a+b)*(a+b))*10;如果定义中没有使用相应的括号,定义为:#defineMULTI(x)(x*x)预编译后的赋值语句变为:p

=a+b*a+b*10;显然与原题意不符。2.宏名与括号之间不能有空格。#defineS(r)PI*r*r错8.2文件包含文件包含也是一种预处理语句,它的作用是使一个源程序文件将另一个源程序文件的全部包

含进来。一般形式为:#include<文件名>或#include“文件名”“文件包含”示意图file1.cfile2.cfile1.c包含#include”file2.c”BABA(a)(b)(c)8.3条件编译8.3.1条件编译命令的形式

常用的有三种形式:形式一:#ifdef宏名程序段1;#else程序段2;#endif或者:#ifdef宏名程序段;#endif8.3.1条件编译命令的形式(续)形式二:#ifndef宏名程序段1;#else程序段2;#endif其中,#ifndef语句的功能与#ifdef相反,如果宏名未

定义则编译程序段1,否则编译程序2。或者:#ifndef宏名程序段;#endif8.3.1条件编译命令的形式(续)形式三:#if常数表达式程序段1;#else程序段2;#endif功能:首先计算“常数表达式”的值,如果为真(非零),就编译“程序段1”,否则编译“程序段2”。如果没有#else部

分,则当“常数表达式”的值为0时,直接跳过#endif。或者:#if常数表达式程序段;#endif例:阅读程序。#include<stdio.h>main(){#ifNULLprintf("NULLisnon-zero

value!\n");#elseprintf("NULLiszerovalue!\n");#endif}运行结果:NULLiszerovalue!8.3.2条件编译命令的嵌套条件编译可以嵌套使用,如:#if表达式1程序段1;#else#if表达式2程序段2;#else程序

段3;#endif#endif

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?