C语言程序设计ppt-第6章

C语言程序设计ppt-第6章

ID:44251259

大小:58.00 KB

页数:15页

时间:2019-10-20

C语言程序设计ppt-第6章_第1页
C语言程序设计ppt-第6章_第2页
C语言程序设计ppt-第6章_第3页
C语言程序设计ppt-第6章_第4页
C语言程序设计ppt-第6章_第5页
资源描述:

《C语言程序设计ppt-第6章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C语言程序设计TheCProgrammingLanguage华中科技大学计算机学院 曹计昌8/4/20211华中科技大学计算机学院第6章编译预处理编译预处理:对源程序进行编译之前所作的工作,它由预处理程序负责完成。编译时,系统将自动引用预处理程序对源程序中的预处理指令进行处理。程序员通过编译预处理命令规定编译器在编译前所作的工作。预处理指令:以“#”号开始的指令。编译obj源程序预处理源程序连接exe8/4/20212华中科技大学计算机学院6.1文件包含#include功能:用指定文件的内容取代该预处理指令行,有2种形式:(1)#include<文件名>在指定的标准目录下寻找被包含文件

2、(2)#include"文件名"首先在用户当前目录中寻找被包含文件,若找不到,再在指定的标准目录下寻找如:#include“stdio.h”#include“math.h”8/4/20213华中科技大学计算机学院6.2宏定义#define功能:用一个标识符来表示一个字符串.一般形式为:#define标识符字符串宏名:被定义的标识符。宏代换(宏展开):在编译预处理时,用字符串去取代宏名预处理前#defineM(y*y+3*y)voidmain(void){ints,y;printf("Inputanumber:");scanf("%d",&y);s=3*M+4*M+y*M;printf(

3、"s=%d",s);}预处理后voidmain(void){ints,y;printf("Inputanumber:");scanf("%d",&y);s=3*(y*y+3*y)+4*(y*y+3*y)+y*(y*y+3*y);printf("s=%d",s);}8/4/20214华中科技大学计算机学院6.3带参数的宏定义#define标识符(标识符,标识符,…,标识符)字符串宏名形式参数宏调用:给出实参宏展开:(1)用字符串替换宏,(2)用实参去替换形参8/4/20215华中科技大学计算机学院例定义计算x2的宏#defineSQ(x)((x)*(x))X:形式参数宏调用:SQ

4、(a+1)/*a+1为实参*/宏展开:((a+1)*(a+1))实际上是用((x)*(x))代替SQ(x),用实参a+1代替形参X。宏调用:SQ(SQ(a))宏展开:((((a)*(a)))*(((a)*(a))))8/4/20216华中科技大学计算机学院为什么要这么多的括号?考虑:#defineSQ(x)x*x宏调用:SQ(a+b)宏展开:a+b*a+b/*与(a+b)*(a+b)不同*/再考虑:#defineSQ(x)(x)*(x)宏调用:27/SQ(3)宏展开:27/(3)*(3)/*值27,与27/32不同*/定义带参数的宏时,为了保证计算次序的正确性,表达式中的每个参数用括号

5、括起来,整个表达式也用括号括起来。8/4/20217华中科技大学计算机学院注意:宏名和与左括号之间不能有空格#defineSQ(x)((x)*(x))被认为是无参宏定义。宏调用:SQ(3)宏展开:(x)((x)*(x))(3)/*显然错误的*/8/4/20218华中科技大学计算机学院带参的宏虽被认为不安全,但还是很有价值#defineSQ(x)((x)*(x))宏调用:SQ(++a)宏展开:((++a)*(++a))/*a加2次如是函数调用,将不会有问题*/宏节省了函数调用的开销,程序运行速度更快,形式参数不分配内存单元,不必作类型说明。但是,宏展开后使源程序增长。宏比较适合于经常使用

6、的简短表达式,以及小的可重复的代码段;当任务比较复杂,需要多行代码才能实现时,或者要求程序越小越好时,就应该使用函数。8/4/20219华中科技大学计算机学院6.4取消宏定义#undef终止宏名的作用域,其形式为:#undef标识符何时使用#undef指令?防止宏名的冲突#include"everything.h"#undefSIZE/*everything.h中定义了SIZE,就取消它;否则该指令不起作用*/#defineSIZE100保证调用的是一个实际函数而不是宏#undefgetcharintgetchar(void){…}8/4/202110华中科技大学计算机学院6.5条件编

7、译条件编译:在预处理中进行条件控制,根据所求条件的值有选择地包含不同的程序部分,因而产生不同的目标代码。这对于程序的移植和调试是很有用的。条件编译指令三种形式,控制流与if-else语句类似。见p172表6.18/4/202111华中科技大学计算机学院例利用R计算圆或正方形的面积预处理前#defineR/*#undefR*/voidmain(void){floatc,r,s;printf("inputanumber:");scanf("%f",

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

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

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