《第章函数》-课件.pptVIP

  • 0
  • 0
  • 约1.11万字
  • 约 38页
  • 2018-11-18 发布于广西
  • 举报
6.9 编译预处理 C 语言除了说明语句、执行语句及控制语句外,还有一类编译 预处理语句。该类语句的作用是在编译时对程序作一定的处理,满 足特定的处理要求。编译预处理时C语言的重要特征。 编译预处理语句的语法形式: #关键词 参数表 编译预处理语句不用;作为结束标志! ⒈宏定义预处理 ⑴不带参数的宏定义 作用:定义常量名,提高程序的可读性,便于修改。 格式: #define 宏名 字符串 #define PI 3.1415926 void main(void) { flaot r; scanf(“%f ”,r) printf(“%f\n”,PI*r*r); } 编译时用字符串替代宏名。 3.1415926 说明: ⑴宏名一般用大写; ⑵编译时用字符串无条件替代宏名; #define PI 3.1415926; … PI*r*r 3.1415926;*r*r ⑶宏名的有效范围,从定义到程序尾。也可以通过#undef修改 定义范围。 #define G 9.8 void main(void ) { … } #undef G G的范围 ⑷可以在宏定义的字符串中使用已定义的宏名。 ⑸” ”字符串中的宏名不替换。 #define R 3.0 #define PI 3.14159 #define S PI*R*R printf(“S=%f”,S); 不替换。 ⑵带参数的宏定义 格式: #define 宏名(参数表) 含参数的字符串 #define S( a , b ) a*b … area=S( 4 , 3 ); 替换过程: ①将实际参数替换宏定义的参数。 ②替换字符串中的参数。 ③替换整个宏。 4*3 带参的宏与函数的区别: 带参宏不分配内存单元,不返回值,只是在编译时按规则替换。 关于带参宏的说明: ①要严格按格式书写,否则会造成错误。 #define S (a,b) a*b S(3,4)被替换成: (a,b) a*b(3,4) ②参数有可能用到表达式时,参数字符要加()。 #define S(r) PI*r*r S(a+b)替换为:PI*a+b*a+b #define S(r) PI*(r)*(r) S(a+b)替换为:PI*(a+b)*(a+b) ⒉文件包含 格式: #include 被包含的文件名 #include ”被包含的文件名” 表示编译系统定义路径; “ ”表示用户指明路径。 作用:将指定的文件的内容和当前文件一起编译。 说明: ⑴一个#include只能包含一个文件。 ⑵被包含文件可以嵌套包含文件。 ⑶一般将宏定义及函数的原型声明放在包含文件中。 ⑷被包含的文件一般扩展名为.h,称为头文件。 文件包含举例:求半径为r的园面积、园周长。 #include “my.h” void main(void) { float r,fArea,fLen; scanf(“%f”,r); fArea=S(r); fLen=L(r); printf(“Area=%f,Len=%f”,fArea,fLen); } float S(float r) { return PI*r*r; } float L(float r) { return 2*PI*r; } #include stdio.h #define PI 3.1415926 float S(float); float L(float); ⒊条件编译 C 语言可以通过条件控制,让编译系统编译不同的程序段,从 而提高程序的移植性并方便调试。 条件编译有三种形式: #ifdef 标识符 program seg1 #else program seg2 #endif #ifndef 标识符 program seg1 #else program seg2 #endif 1 2 3 #if 表达式 program seg1 #else program seg2 #endif 条件? 满足 编译程序段1 不满足 编译程序段2 举例:通过条件编译选择求最大值或最小值 #include stdio.h void main(void) { int a,b; scanf(“%d,%d”,a,b); #ifdef MAX printf(“%d”,a=b?a:b); #else printf(“%d”,a=b?a:b); #endif } #define MAX #include stdio.h void

文档评论(0)

1亿VIP精品文档

相关文档