当前位置:文档之家› 樊媛媛《c语言程序设计》09-编译预处理

樊媛媛《c语言程序设计》09-编译预处理

#define S(a,b) a*b area=S(3,2); 定义宏名S代表矩形面积,参数a,b为边长。 宏展开过程:
ppt课件
7
9.2 文件包含处理 在一个源文件中将另一个源文件的内容包 含进来。 文件包含指令的一般形式: #include “文件名” 或 #include <文件名>
ppt课件
第九章 编译预处理
C语言提供了一些以#开头的指令,如:
#define #include 等。
这些指令是在编译以前就事先进行处理的,因 而称为“编译预处理”指令。
可以用编译预处理指令实现以下三种功能:
1) 宏定义
2) 文件包含
3) 条件编译
பைடு நூலகம்
ppt课件
1
9.1 宏定义 1、不带参的宏定义 用一个指定的标识符(宏名)代表一个字符串。 一般形式: #define 标识符 字符串 如:#define PI 3.1415926 有了这一宏定义后,程序中凡是用到3.1425926 的地方都可以以宏名PI出现。
f.h
#define PI 3.1415926 float f1(float r); float fac(int n);
ppt课件
11
此课件下载可自行编辑修改,供参考! 感谢您的支持,我们努力做得更好!
——宏展开。
ppt课件
3
例:定义一个宏名来代表一个数据个数。eg9-02.c #define N 100 main() { int a[N],i; float s=0;
for(i=0;i<N;i++)scanf(“%d”,&a[i]); for(i=0;i<N;i++)s+=a[i]; s/=N; printf(“\n %f”,s); } 宏名N---符号常量,可以作为数组说明的长度。 方便修改参数。
ppt课件
5
注意以下程序的运行结果: eg9-04.c
#define F1 x+y
#define F2 (x+y)
main()
{ int x=3,y=5,z1,z2;
z1=2*F1;
z2=2*F2;
printf(“\n %d”,z);
}
ppt课件
6
2、带参的宏定义 宏定义也可以带参数,其一般形式为: #define 宏名(参数表) 字符串 如: eg9-05.c
8
file1.c
#include “file2.c”
file2.c
B
A
file1.c
B A
ppt课件
9
例:
#include “math.h”
main()
{ float a,b,c,s,area;
scanf(“%f%f%f”,&a,&,&c);
s=0.5*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
ppt课件
4
例:定义一个宏名来代表一个计算公式。eg9-03.c #define PI 3.1415926 #define AREA PI*r*r main() { float r=3,s;
s=AREA; printf(“\n %f”,s); } 注意:系统对宏定义的预处理是一个字符串的还原过 程,不要把宏名看成一个整体。
ppt课件
2
例:定义一个宏名来代表一个参数。eg9-01.c #define PI 3.1415926 main() { float r=1.0,c,s; c=2*PI*r; s=PI*r*r; ┈}
系统在对程序进行编译以前,首先将所有的编
译预处理指令进行预处理,对本例来说,就是
将程序中所有的宏名PI还原成3.1415926,
printf(“\n %f”,area);
}
ppt课件
10
f.c
#include “f.h” main() { printf(“\n%f”,f1(3.0)); printf(“\n %f”,fac(10)); } float f1(float r) { return(PI*r*r); } float fac(int n) { int i; float s=1; for(i=1;i<=n;i++) s*=i; return(s); }
相关主题