2.2.5 宏定义
1. 宏定义
宏定义是用一个指定的标识符来代替一个字符串,一般形式如下。
- #define 标识符 字符串
用#define来定义符号常量如下。- #define PI 3.14
上行代码表示用标识符PI代替字符串“3.14”,在编译预处理时,将程序中在该命令以后出现的所有PI都用“3.14”代替。这个标识符被称为宏名,在预编译时将宏名替换成字符串的过程称为宏展开,#define是宏定义命令。使用宏定义应注意以下几点。
宏定义是用宏名替换字符串,但不进行正确性检查。
宏定义不用在行末加分号。
#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到源文件结束。
可以使用#undef命令终止宏定义的作用域。
在进行宏定义时,可以引用已定义的宏名,还可以层层替换。
用双引号括起来的字符串内的字符,不进行替换。
宏定义只进行字符替换,不分配内存空间。
2. 带参数的宏定义
除了进行简单的字符串替换外,还可以进行参数替换。其一般形式如下。
- #define 宏名(参数表) 字符串
带参数的宏定义如下。- 01 #define C(a,b) a*b
- 02 语句D = C(3,5);相当于D = 3*5;
在使用带参数的宏定义时需要注意以下两点。
带参数的宏展开,只是使语句中宏名后面括号内的实参字符串,代替#define命令中的形参。
在宏名与参数的括号间不能加空格。