c语言第8章预处理

c语言第8章预处理

ID:36322269

大小:218.50 KB

页数:22页

时间:2019-05-09

c语言第8章预处理_第1页
c语言第8章预处理_第2页
c语言第8章预处理_第3页
c语言第8章预处理_第4页
c语言第8章预处理_第5页
资源描述:

《c语言第8章预处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言程序设计第八章预处理命令第八章编译预处理目的:为了简化程序的编写,提高程序的可移植性、可读性、模块化。C语言设计了若干命令–––编译预处理命令,并可出现于程序当中。处理流程:第一次编译扫描时,将预编译命令处理完,然后再进行正式编译,生成目标代码。1.宏定义命令;有三种类型的预处理命令:为了与C语句区别,这些命令均以“#”开头。2.文件包含命令;3.条件编译命令。§8.1宏定义简化程序的书写,提高可读性、可移植性。一、无参数形式#define标识符字符串表达式宏定义分为:无参数和有参数二种形式。#include

2、#defineL(x*x+2*x+x)main(){intx,y;printf(“inputanumber:”);scanf("%d",&x);y=L*L+2*L+10;printf("y=%d",y);}例如:上例中,#defineL(x*x+2*x+x),在y=L*L+2*L+10;中作了宏调用。在预处理时经宏展开后该语句变为:y=(x*x+2*x+x)*(x*x+2*x+x)+2*(x*x+2*x+x)+10;注意几点:(1)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名

3、,只是一种简单的代换。(2)宏定义不是说明或语句,在行末不加分号。(3)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。(4)用引号括起来的宏名,预处理程序不对其作宏代换。(5)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。(6)宏名一般用大写字母表示,以便于与变量区别。二、有参形式合适于字符串表达式序列中有变化的字符,将这部分字符可定义为参数。#define宏名(形参表)字符串带参宏定义的一般形式为:例如:#defineL(x)(x*x+2*x+x)/*带参

4、数宏定义*/宏调用:y=L(5);在宏调用时,用实参5去代替形参x,经预处理宏展开后的语句为:y=(5*5+2*5+5);例:#include#defineMAX(a,b)(a>b)?a:bmain(){intx,y,max;scanf("%d%d",&x,&y);max=MAX(x,y);printf("max=%d",max);}说明:上例程序中,表达式(a>b)?a:b由宏名MAX表示,形参a,b均出现在条件表达式中。程序中:max=MAX(x,y);为宏调用,实参x,y将代换形参a,b

5、。宏展开后该语句为:max=(x>y)?x:y;注意几点:(1)宏定义中,宏名和形参表之间不能有空格出现。例如:#defineMAX(a,b)(a>b)?a:b将被认为宏名MAX代表的字符串是(a,b)(a>b)?a:b,是无参宏定义。(2)在带参宏定义中,形式参数不同于函数中的形参,带参宏定义中的参数不是变量,只是在宏调用时用实参的符号去代换形参,即只是符号代换。所以,不存在值传递的问题。(3)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。(4)在宏定义中的形参最好用括号括起来,以避免出错。如果去掉上例

6、中(y)*(y)表达式的括号,宏代换后将得到以下语句:y=sin(x)+l*sin(x)+l;显然,展开后的表达式与题意相违。为了保证宏代换的正确性,应该给宏定义中的表示表达式的字符串加上括号,如:#defineL(x)((x)*(x)+2)宏调用:y=l/L(a+5);宏代换后:y=l/((a+5)*(a+5)+2);如果字符串没有加上括号,宏代换后会得到完全不同的表达式:y=l/(a+5)*(a+5)+2;(5)带参宏与带参函数的区别。§8.2文件包含C语言允许在一个文件预编译时,将另一个文件原封不动地包含进来

7、。目的:当函数不在一个文件中,既可用link连接编译后的obj文件,也可用“文件包含”方式。当一组符号常量的定义为公用时,可作为一个独立的文件被其它文件包含。格式:#include"文件名"#include"f2.c"main(){}例:f1.cf2.c: : : :预编译后:: :main(){}f1.c为f2.c中的内容再进行正式编译1.一个include只能写一个文件,包含多个文件需多个include只在f1.c中用#include.#include"f2.c"#include"f3.c"分别

8、在f1.c,f2.c中用#include在f1.c中:#include"f2.c"在f2.c中:#include"f3.c"2.当f1.c包含f2.c,而f2.c又包含f3.c时,有两种包含形式:3.一般用.h扩展名命名被包含文件。h为head之意以与一般.c文件区别。如系统stdio.h.系统.h文件在子目录INCLUDE下。4.#include后的文件名

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

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

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