宏提供了一种机制,能够使你在编译期替换代码中的符号或者语句。当你的代码中存在大量相似的、重复的代码时,使用宏可以极大的减少代码量,便于书写。?
// 定义圆周率
#define PI 3.14159265
// 定义一个空指针
#define NULL ((void*)0)
// 定义一个宏的名字为 SYSTEM_API,但是没有值
#define SYSTEM_API
double perimeter = diameter * 3.14159265;
class SYSTEM_API CSystem;
//等价
double perimeter = diameter * PI;
class CSystem;
//编译的替代性
?
#define MUL(x, y) ((x) * (y))
int ret = MUL(2 + 3, 4);
int ret = ((2 + 3) * (4));
多加几个括号防止运算失误
如:
#define MUL(x, y) x * y
int ret = MUL(2, 3); ==> int ret = 2 * 3;
#
和##
//#转化为字符串
#define STRING(x) #x
const char * str = STRING(test);
// str的内容就是"test"
##符号会连接两边的值,像一个粘合剂一样,将前后两部分粘合起来,从而产生一个新的值,例如
#define VAR(index) INT_##index
int VAR(1);
// 宏被展开后将成为 int INT_1;