文档介绍:第9章预处理命令(1学时)
C提供的预处理功能主要有三种:
宏定义
文件包含
条件编译
预处理命令都以符号“#”开头
如:#define
#include
#if ~#else~#endif
宏定义
不带参数的宏定义
格式: #define 标识符字符串
如: #define PI
作用:用标识符PI代替“”字
符串
以一个简单的名字代替一个长字符串在预编译时进行宏展开
可以用#undef命令终止宏定义的作用域
在进行宏定义时,可以引用已定义的宏名,可以层层置换
#define R
#define PI
#define L 2*PI*R
#define S PI*R*R
main( )
{
printf("L=%f\nS=%f\n",L,S);
}
结果:L=
S=
L展开后为:2**
S展开后为:**
对程序中用双引号扩起来的字符串内的字符不进行置换
宏定义与变量的定义不同,只作字符替换,不分配内存空间
带参的宏定义
格式:#define 宏名(参数表) 字符串
如:#define S(a,b) a*b
area=S(3,2);
展开后:area=3*2;
#define PI
#define S(r) PI*r*r
main( )
{float a,area;
a=;
area=S(a);
printf("r=%f\narea=%f\n",area);}
运行结果:r=
area=
赋值语句area=S(a);经宏展开后为:
area=*a*a;
讨论:
带参的宏改为:area=S(a+b);
经宏展开后的表达式为:
area=PI*a+b*a+b;
等同于:area=(PI*a)+(b*a)+b;
正确用法: #define S(r) PI*(r)*(r)
“文件包含”处理
一个源文件可以将另一个源文件的全部内容包含进来称“文件包含”
格式:#include “文件名”
或#include <文件名>
文件包含的使用可以节省设计人员的重复劳动。如,符号常量的加载
include<>
A
B
A
B
条件编译
当条件满足时对一组语句进行编译,否则对另一组语句进行编译
(1)
格式:
#ifdef 标识符
程序段1
[#else
程序段2]
#endif
(2)
格式:
#ifndef 标识符
程序段1
[#else
程序段2]
#endif
(3)
格式:
#if 表达式
程序段1
#else
程序段2
#endif