网站大量收购闲置独家精品文档,联系QQ:2885784924

C程序设计(第四版)第6章编译预处理课件.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计(第四版)第6章编译预处理课件

第六章 编译预处理;6.1 文件包含;【说明】   1、一个include命令只能指定一个被包含文件,若要包含多个,必须要用多条include预处理命令。   2、文件包含可以嵌套。例如,若文件1中包含文件2,而文件2中又包含文件3,则可在文件1中用两条include预处理命令分别包含文件2和文件3,但文件3应出现在文件2之前。;  3、在文件包含预处理命令中,文件名用双引号和尖括号括起来是有区别的:  (1)若双引号括起来,则系统先在引用被包含文件的C源程序所在的文件目录中查找,若找不到,再按系统指定的标准方式寻找其它目录。  (2)若用尖括号括起来,则系统仅查找按标准方式指定的目录。;6.2 宏定义;6.2.1 不带参数的宏定义;【例6-1】 #define PI 3.14159 main() { float l,s,r,v; printf(“Input radius:”); scanf(“%f”,r); l=2.0*PI*r; s=PI*r*r; v=3.0/4*PI*r*r*r; printf(“L=%10.2f\nS=%10.2f\nV=%10.2f\n”,l,s,v); } ;【说明】   1、通常#define命令出现在文件的开头,宏名的有效范围为定义命令之后到本文件结束。用#undef命令也可终止宏定义。   2、宏名习惯上用大写字母表示,以便与变量名相区别。   3、宏定义是用宏名替换一个指定的字符串,也就是作简单的置换,不做正确性检查。   4、宏定义不是C语句,不必在行末加上分号。若加了分号,则会连分号一起进行置换。   5、在进行宏定义时,可以引用已定义的宏名,可以层层置换。例如: ;#define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define S PI*R*R #include stdio.h main() { printf(“L=%f\nS=%f\n”,L,S);} 运行结果如下: L=18.849556 S=28.274333 经过宏展开后,printf函数中的输出项L被展开为2*3.1415926*3.0,S被展开为3.1415926*3.0*3.0。 ;  6、对程序中用双引号括起来的字符串内的字符,即使与宏名相同,也不进行置换。如上例中printf函数 “L=%f\nS=%f\n”格式控制字符串中的“L”和“S”是不进行置换的。   7、使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。增强程序的可读性和可靠性。;6.2. 带参数的宏定义;  在宏展开时,预处理程序用S(3,4)中的3和4分别替换宏定义中的x和y,即用3*4替换S(3,4),因此上面语句展开后为:   area=3*4;  请看下面例子:  【例6-2】   #define MAX(a,b) (ab)?a:b   #include stdio.h   main()   { int x,y,max;;  printf(input two numbers: ); scanf(%d%d,x,y); max=MAX(x,y); printf(max=%d\n,max);  }  运行结果如下:  input two numbers:15 30  max=30;【说明】   1、带参数的宏定义中,宏名和参数表之间不能有空格出现。否则将空格以后的字符都作为替换字符串的一部分。例如:   #define S(x,y) x*y  若写成:   #define S (x,y) x*y  在宏展开时,S被替换成“(x,y) x*y”字符串了。   2、对带参数的宏定义的展开只是将语句中的宏名后面括号内的实参字符串替换定义中的形参。例如,对于以下宏定义:;  #define S(x,y) x*y 语句: area=S(3+5,6-2);宏展开的形式为:   area=3+5*6-2;   area=31;   这个结果可能与程序设计者的意愿:(3+5)*(6-2)不相符。为了得到(3+5)*(6-2)这个结果,应当在宏定义时,在字符串中的参数修面加上一对括号,即:   #define S(x,y) (x)*(y)   这样在宏展开时即可以得到(3+5)*(6-2)的结果了。 ; 3、带参数的宏定义与函数调用的区别   有些记者容易把带参数的宏定义与函数调用相混淆。的确,之间有一定类似之处,在函数调用时也是在函数名后的括弧内写上实参,也实参与形参的数目相等。但带参数的宏定义与函数调用是不同的。主要有:  (1)函数调用时,先求出实参表达式的值,然后将实参的值复制一份传递给形参。而带参

文档评论(0)

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

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

1亿VIP精品文档

相关文档