[数学]第13章变量存储类型与多文件系统09_09_NIT_L.ppt

[数学]第13章变量存储类型与多文件系统09_09_NIT_L.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[数学]第13章变量存储类型与多文件系统09_09_NIT_L

编译预处理 一、宏定义 a. #define 标识符 字符串 b. #undef 标识符 1.宏定义的简单形式:(不带参数的宏定义) #define 标识符 字符串 如: #define PI 3.1415 #define YES 1 在编译予处理时,简单地把凡是PI地方用3.1415取代。 (不管写成什么形式,按原样展开). 在程序中凡遇宏名,就以其后的字符串代替,称宏展开. 宏名 说明: (1). 定义的标识符(宏名)在程序中只能作常量处理. 不能 当作变量处理,不能对其进行赋值操作。 (2). 使用简单的宏定义时,已定义的标识符可以进行层 层代换, 但注意先后次序。 如:#define A 10 #define B 20 #define S A*B (3). 如果宏替换名出现在字符串中,不会进行宏置换. 如: #define STR “Hello” printf(“STR”); 将不会打印 Hello, 而是打印STR. 2.带参数的宏定义: 一般格式: #define 宏名(参数表) 字符串 如:#define S(a,b) a*b #define V(a,b,c) a*b*c 予处理时,宏名的实参值一一替换字符串中的形参,但不是参数的字符照样保留。 如:#define S( a ,b ) a * b area=S( 3 , 2) 3*2 例: #define PI 3.1415926 #define S(r) PI*r*r main( ) { float a, area; a=3.6; area=S(a); printf(“r=%f\n area=%f\n”,a,area); } 说明: (1). 上例中,只要把S(a)中的实参a代替宏定义中的 字符串“PI*r*r”中的形参r, 即得到PI*r*r. 如果有下列语句: area=S(a+b); 进行宏替代后成为: area=PI*a+b*a+b; /* 与原意不符 ! */ 原意想得到 : area=PI*(a+b)*(a+b); 那么应该如下定义: #define S(r) PI*(r)*(r) (2). 使用宏定义时,该行最后不要加“;”号, 否则连同 分号 一起展开。 如; #define K(L) L*50*50; 有语句:Val=K(5)+6+2*K(0.2); 宏展开后:Val=5*50*50; +6+2*0.2*50*50; (3). 宏名与参数表之间不可有空格: 如;#define S凵(x) x+6 (4). 带参数的宏和函数有一定类似之处,但也有不同之点: a.函数调用时,先求实参表达式的值,然后代入形参,而 使用带参的宏只是进行简单的字符替代. b. 函数调用是在程序运行时处理的,分配临时的内存 单元,而宏展开则在编译时进行,不进行值的传值处 理. *.写出下列程序段的输出结果。 #define F(x) x - 2 #define D(x) x*F(x) printf(%d,%d, D(3), D(D(3))) ; 7,-13 D(3) ---- 3*F(3) ----3*3-2 D(D(3)) ----- D(3*3-2) ---- 3*3-2

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档