1 / 9

第九章 预处理命令

第九章 预处理命令. C 语言有一类编译预处理语句,该类语句的作用是在通常编译之前对程序作一定的处理,然后再由编译程序对预处理后的源程序进行通常的编译。现在所使用的 C 编译系统都包括了预处理、编译和连接等部分,在进行编译时一气呵成。. C 语言提供的预处理功能主要有以下 3 种: 1. 宏定义 2. 文件包含 3. 条件编译. 编译预处理语句的语法形式:. # 关键词 参数表. 编译预处理语句不用 “ ; ” 作为结束标志!. ⒈ 宏定义预处理. ⑴ 不带参数的宏定义.

taima
Download Presentation

第九章 预处理命令

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第九章 预处理命令 C 语言有一类编译预处理语句,该类语句的作用是在通常编译之前对程序作一定的处理,然后再由编译程序对预处理后的源程序进行通常的编译。现在所使用的C编译系统都包括了预处理、编译和连接等部分,在进行编译时一气呵成。 C语言提供的预处理功能主要有以下3种: 1.宏定义 2.文件包含 3.条件编译 编译预处理语句的语法形式: #关键词 参数表 编译预处理语句不用“ ; ”作为结束标志!

  2. ⒈宏定义预处理 ⑴不带参数的宏定义 用一个指定的标识符(即名字)来代表一个字符串,也就是符号常量的定义,形式如下: #define宏名 字符串 #define PI 3.1415926 void main(void) { flaot r; scanf(“%f ”,&r) printf(“%f\n”,PI*r*r); } 编译时用字符串替代宏名。

  3. 说明: ⑴宏名一般习惯用大写; ⑵编译时用字符串无条件替代宏名; #define PI 3.1415926; … PI*r*r 3.1415926;*r*r ⑶宏名的有效范围,从定义到程序尾。也可以通过#undef修改 定义范围。 #define G 9.8 void main(void ) { … } #undef G #define R 3.0 #define PI 3.14159 #define S PI*R*R G的范围 printf(“S=%f”,S); 不替换。 ⑷可以在宏定义的字符串中使用已定义的宏名。 ⑸” ”字符串中的宏名不替换。

  4. ⑵带参数的宏定义 格式: #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

  5. #define M 3 #define N M+3 #define NN N*N main() { printf("NN=%d",NN); } #define M 3 #define N M+3 #define NN (N)*(N) main() { printf("NN=%d",NN); } 结果为: NN=(3+3)*(3+3)=36 结果为: NN=3+3*3+3=15

  6. ⒉文件包含 格式: #include <被包含的文件名> #include ”被包含的文件名” < >到存放C库函数的头文件的目录中寻找要包含的文件(标准方式); “ ”先到用户当前路径找要包含的文件,找不到时才按标准方式找。 作用:将指定的文件的包含到本文件中。

  7. 文件包含举例:求半径为r的园面积、园周长。文件包含举例:求半径为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);

  8. ⒊条件编译 C 语言可以通过条件控制,让编译系统编译不同的程序段,从 而提高程序的移植性并方便调试。 条件编译有三种形式: #ifdef 标识符 program seg1 #else program seg2 #endif #if 表达式 program seg1 #else program seg2 #endif 3 1 #ifndef 标识符 program seg1 #else program seg2 #endif 满足 不满足 条件? 2 编译程序段1 编译程序段2

  9. 举例:通过条件编译选择求最大值或最小值 #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 main(void) { int a,b; scanf(“%d,%d”,&a,&b); printf(“%d”,a>=b?a:b); }

More Related