- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 12 章 编 译 预 处 理
第12章编译预处理
12.1 宏定义
12.2 文件包含
12.3 条件编译
第 12 章 编 译 预 处 理
12.1 宏定义
12.1.1 不带参数的宏定义
定义形式:
#define 宏名 宏体
宏名是一自定义标识符,宏体是一字符串,在程序
中可用宏名代表宏体。
第 12 章 编 译 预 处 理
例如,用PI代表3.1415926,用PR代表printf ,宏
定义如下:
(1) #define PI 3.1415926
(2) #definee PR printf
程序中凡是出现3.1415926的地方,都可以以PI 出
现,凡是出现printf 的地方,都可以以PR 出现。
第 12 章 编 译 预 处 理
例12-1 利用宏定义求圆的周长和面积。
/* 程序12 - 1,利用宏定义求圆的周长和面积 */
#define PI 3.1415926
#define R 1.0
main ()
{float l,s;
l=2.0*PI*R ;
s=PI*R*R;
printf (″周长=%f ,面积=%f\n ″,l,s );
}
第 12 章 编 译 预 处 理
上面程序在编译前将进行宏展开,宏展开以后
变为:
main ()
{float l,s;
l=2.0*3.1415926*1.0 ;
s=3.1415926*1.0*1.0;
printf (″周长=%f ,面积=%f\n ″,l,s );
}
第 12 章 编 译 预 处 理
(1) 宏名一般习惯用大写字母表示,以便与变量名相区
别。当然可以使用小写字母。
(2) 宏定义是用宏名简单替换宏体,也就是作简单的置
换,不作语法检查, 出现错误也不会报告,只有在宏展开
后编译时才会报告错误。
(3) 程序中双引号中与宏名相同的内容不被替换。
(4) 宏展开后源程序将变长。
(5) 使用宏名,可以减少程序中重复书写某些宏体的工
作量。
(6) 宏定义一般放在程序的开头,宏名的有效范围为定
义位置到文件结束。
(7) 宏定义可以嵌套,后定义的宏可使用已定义的宏。
第 12 章 编 译 预 处 理
12.1.2 带参数的宏定义
定义形式:
#define 宏名(参数表)宏体
带参数的宏展开时要从左至右进行参数的简单替
换,使用起来较无参数宏定义复杂。
例如:
(1) #define S (n )(n )* (n )* (n )
(2) #define T (n )1/ (n )
第一个式子代表n 的立方,第二个式子代表n 的倒数。
第 12 章 编 译 预 处 理
说明:
(1) 列出的参数必须在宏体中用到。
(2) 带参数的宏展开只是将实参简单替换形参。当实参
中含有运算,宏展开可能会出问题。
如有宏定义:
#define S (n ) n*n*n
若将形参n 用实参a+b 替换,S (a+b )会变成
a+b*a+b*a+b,显然与原意不相符。
如将宏定义改成:
#define S (n )(n )* (n )* (n )
S (a
文档评论(0)