c语言 第9章编译预处理.ppt
上传人:sy****28 上传时间:2024-09-15 格式:PPT 页数:18 大小:147KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

c语言 第9章编译预处理.ppt

c语言第9章编译预处理.ppt

预览

免费试读已结束,剩余 8 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第九章编译预处理编译预处理简介宏定义无参宏定义#defineM(y*y+3*y)main(){ints,y;printf("inputanumber:");scanf("%d",&y);s=3*M+4*M+5*M;printf("s=%d\n",s);}宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。宏名在源程序中若用引号括起来,则预处理程序不对其作宏替换。宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。例如:#definePI3.1415926#defineSPI*y*y语句printf("%f",s);在宏替换后变为:printf("%f",3.1415926*y*y);习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。带参宏定义#defineMAX(a,b)(a>b)?a:bmain(){intx,y,max;printf("inputtwonumbers:");scanf("%d%d",&x,&y);max=MAX(x,y);printf("max=%d\n",max);}带参宏定义中,宏名和形参表之间不能有空格出现。在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。在宏定义中,字符串内的形参通常要用括号括起来以避免出错。#defineSQ(y)((y)*(y))main(){inta,sq;printf("inputanumber:");scanf("%d",&a);sq=160/SQ(a+1);printf("sq=%d\n",sq);}文件包含在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。使用预处理功能便于程序的修改、阅读、移植和调试,也便于实现模块化程序设计。/*File1.h*/Inta;Intb;包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如:#include“stdio.h”#include<math.h>使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。在系统头文件中,包含了相应函数的原型及符号常量等进行了说明和定义。如:stdio.h中包含了标准输入/输出函数所需要的符号常量、宏和函数说明等。