编译预处理和数据类型重命名

编译预处理和数据类型重命名

ID:39361442

大小:349.31 KB

页数:25页

时间:2019-07-01

编译预处理和数据类型重命名_第1页
编译预处理和数据类型重命名_第2页
编译预处理和数据类型重命名_第3页
编译预处理和数据类型重命名_第4页
编译预处理和数据类型重命名_第5页
资源描述:

《编译预处理和数据类型重命名》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第18讲编译预处理和数据类型再命名第18讲编译预处理和数据类型再命名本讲主要内容宏定义不带参数的宏带参数的宏文件包含一般形式文件包含的有关说明条件编译ifdef-else-endif形式ifndef-else-endif形式if-else-endif形式数据类型再命名typedef的一般形式typedef应用举例第18讲编译预处理和数据类型再命名教学目标了解编译预处理的概念,了解宏的概念。了解文件包含的概念,熟练掌握文件包含命令include的用法。了解条件编译的概念,熟悉常用的条件编译命令及其用法。了解文件重名的意义,

2、掌握typedef命令的使用方法。一、宏定义不带参数的宏不带参数的宏是用一个标识符代替一个字符串,其一般形式如下:#define宏名宏体其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。宏名是一个标识符,宏体可以是一个字符串,也可以是一个数值,也可以是一个表达式等。例如:#definePI3.1415926一、宏定义例17-1宏定义应用举例。#defineTWO2#defineMSG"Iloveclanguage."#defineFMT"numberis%d"main

3、(){intnumber=TWO;printf(FMT,number);printf("%s",MSG);}一、宏定义例17-2计算圆面积。#definePI3.14main(){floatR=16.99;printf("S=PI*R*R=%f",PI*R*R);}一、宏定义例17-3计算圆的周长和面积。#defineR3.0#definePI3.1415926#deinfeL2*PI*R/*使用宏R和PI定义宏L*/#defineSPI*R*R/*使用宏R和PI定义宏S*/main(){printf("L=%f

4、S=%f",L,S);}一、宏定义例17-4输出格式定义为宏。#definePRprintf#defineNL""#defineD"%d"#defineD1DNL#defineD2DDNL#defineD3DDDNL#defineD4DDDDNL#defineS"%s"main(){inta,b,c,d;charstring[]="Thisisastring.";a=1;b=2;c=3;d=4;PR(D1,a);PR(D2,a,b);PR(D3,a,b,c);PR(D4,a,b,c,d);PR(S,strin

5、g);}一、宏定义关于宏定义的说明:⑴宏名一般使用大写形式。⑵使用宏可以提高程序的可读性和可移植性。⑶宏定义是用宏名来表示一个字符串,在宏替换时又以该字符串取代宏名,这只是一种简单的代换。⑷宏定义不是C语句,后面不能有分号。如果加入分号,则加入的分号将作为宏体的一部分。⑸通常把#define命令放在一个文件的开头,使其在本文件全部有效。⑹宏定义终止命令#undef结束先前定义的宏名。⑺程序中用双引号括起来的字符串,即使与宏名相同,也不替换。⑻宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序

6、层层替换。⑼宏定义名仅用于编译预处理,不是程序变量,因此系统不会为它分配内存空间。一、宏定义带参数的宏带参数宏定义的一般形式如下:#define宏名(参数表)字符串其中:⑴宏名后的参数表可以是一个参数,也可以是多个参数,当有多个参数时,各参数之间用“,”分割。⑵用于宏体的字符串部分要包括参数表中的参数。例如:#definemax(x,y)x>y?x:y宏替换按如下过程进行:对于程序中带实参的宏,按照宏定义中的字符串从左到右进行替换,当遇到宏中的形参时,就用程序语句中的宏实参取代它,对于宏定义字符串(宏体)中的非参数字符,

7、则予以保留。一、宏定义例17-5利用宏定义求三个数的最大数。#include"stdio.h"#definemax(x,y)x>y?x:ymain(){inta,b,c,m;scanf("%d%d%d",&a,&b,&c);m=max(a,b);/*使用宏max,a、b为宏实参*/printf("max=%d",max(m,c));/*m、c为宏实参*/}一、宏定义使用带参数的宏时应注意如下问题:⑴在带参宏定义中,形式参数不分配内存单元,也不存在类型定义问题。而宏调用中的实参有具体的值,要用它们去替换形参,因此必须首

8、先进行类型说明。⑵如果程序中有使用表达式作为宏实参的情况,那么在进行宏定义时,出现在宏替换字符串中的宏参数应使用括号()进行限定,否则宏替换后有可能产生错误的结果。⑶带参宏定义中,宏名和形参表之间不能有空格出现,一旦出现了空格,就变成了不带参数的宏定义。一、宏定义带参数的宏与函数调用的区别:⑴函数调用时要先计算实参表

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

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

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