-
1 文字讲解
-
2 实训视频
一、宏定义
宏定义和文件包含都属于编译预处理命令,以“#”开头,结尾部分不要加分号(除非有特别需要),编译预处理命令的作用不是实现程序的功能,而是给C语言编译系统提供信息,通知C编译器在对源程序进行编译之前应该做哪些预处理工作。
①不带参数的宏定义
命令的一般形式如下:
#define 标识符 字符串
定义中的“标识符”为用户定义标识符,称为宏名宏名一般用大写字母。在预编译时,将程序中出现的宏名均替换成“字符串”的内容,这一过程称为宏展开。例如:
#define PI 3.1415926
则程序中凡遇PI均用3.1415926代替,如"2*PI*r"宏展开为"2*3.1415926*r"
②带参数的宏定义。
命令的一般形式如下:
#define 宏名(形式参数表) 字符串
定义中的“字符串”应包含括号中所指定的形式参数。注意:宏名与括号之间不要加空格,否则就成为不带参数的宏定义了。
③带参数的宏展开
预编译时,遇到带实参的宏名,则按命令行中指定的字符串从左到右进行转换。
原则是:
凡遇形参则以实参代替,非形参字符则原样保留,从而形成展开后的内容。
例如:
#define AREA(r) PI*(r)*(r)
则“AREA(3+2)”宏展开后变成“3.1415926*(3+2)*(3+2)"
例1-3 求梯形的面积
说明:梯形的面积为上底加下底乘高除2。
设梯形的上底,下底和高分别用a、b和h表示,则梯形的面积等于(a+b)xh/2.0。
程序如下:
#include <stdio.h>
#include <conio.h>
#define S(a,b,h) (a+b)*h/2.0
main( )
{
double y;
y=S(2,3,5);
printf("梯形面积=%f\n",y);
getch( );
}
运行结果如图1-25所示。

#define是宏定义命令,但它不是C语句,不必在行末加分号。如果加了分号,则连分号一起进行置换。例如:
#define PI 3.1415926;
........
area=PI*r*r ;
经宏展开后,该语句为“area=3.1415926;*r*r;"; 显然"area=3.1415926;*r*r;"存在语法错误。习惯上,符号常量名用大写字母表示,当然也可以用小写,但前后必须一致,否则将出现语法错误。例如,将程序中的
len=2*PI*r;
改为
len=2* pi*r:
后,编译时产生错误“Error:pi' undefined(first use in function)“,意思是:符号常量pi未定义 (在该函数中首次使用)。这是因为C语言对大小写敏感,PI和pi的意义是不同的,在编写程序时,要特别注意。
案例1:计算圆的面积,有两种方案,你认为那一种方案可行?为什么?
方案一:
#include <stdio.h>
#include <conio.h>
#define PI 3.1415926
#define AREA(r) PI*(r)*(r)
main( )
{
float area = AREA(1+1);
printf("area=%f\n", area);
getch( );
}
方案二、
#include <stdio.h>
#include <conio.h>
#define PI 3.1415926
#define AREA(r) PI*r*r
main( )
{
float area = AREA(1+1);
printf("area=%f\n", area);
getch( );
}
二、文件包含
文件包含的作用是将一个源程序文件包含到另一个源程序文件中,它以”#include”开头,例如,例1-3的开头两行就是两个文件包含命令。
格式1:#include <文件名>
格式2: #include “文件名”
当使用格式1时,C编译系统将在系统指定的路径下搜索尖括号中的文件,一般适用于包含库函数的头文件;
当使用格式2时,系统首先会在用户当前的目录中搜索双引号中的文件, 如果找不到,再按系统指定的路径下搜索,一般适用于包含用户文件的头文件
例1-4 创建一个头文件prt.h,用来输出一个整数;main()函数所在文件ex1-4.c包含该文件
操作重点:头文件prt.h与文件ex1-4.c源程序文件必须处于同一目录下。
操作步骤:
①建立头文件( prt.h )
操作如下:
dev-c++软件操作如下:
文件->新建->源代码->输入相关代码->保存->保存类型为header file
vc++软件操作如下:
在“解决方案资源管理器”中,右键单击“头文件”,选择“添加”→“新建项”,选择“头文件(.h)”,输入名称“prt”单击“添加”按钮返回主菜单。
prth.h头文件内容 如下:
#define INT(a) printf("%d ", a)
prt.h文件如图1-26所示

②在“源文件”处添加主函数文件ex1-4.c,内容如下:
#include <stdio.h>
#include <conio.h>
#include "prt.h"
main( )
{
INT(2); INT(3); INT(5);
getch();
}
ex1-4.c文件如图1-27所示。
③按F5键运行程序,运行结果如图1-28所示。



