C++进阶-宏定义

宏定义

宏定义又称为宏替换,简称“宏”。在 C++世界中,使用“#define”指令来定义一个宏:

无参数的宏

#define 标识符 字符串

其中,标识符就是所谓的符号常量,也称为“宏名”,其后的字符串可以是一个数字,也可以是一个字符串常量,甚至可以是一个复杂的表达式。当定义好宏之后,就可以在程序代码中使用这个宏来代替宏定义中的字符串。

// 定义一个宏,表示圆周率
#define PI 3.14159
// 利用定义的宏计算圆的面积
double fR = 5.0f;
double fArea = PI * fR * fR;

代码在最终参与编译之前会经过一个预编译过程。也就是在这个过程中,如果遇到代码中使用了宏,就会将宏展开,也就是将宏名替换为宏定义中的字符串。所以,宏展开后,这段代码实际上成为:

// 宏展开后的代码
double fArea = 3.14159 * fR * fR;

带参数的宏

除了这种不带参数的宏之外,还可以在宏定义中加入参数,让宏的使用更加灵活。其语法格式如下:

#define 标识符(参数列表) 字符串

其中,参数列表列出的就是这个宏的所有参数。跟函数参数不同,宏的参数并没有类型的概念,更多的只是一个替代或者说占位符,用作宏展开时使用相应的实际参数替换参数列表中的参数。对带有参数的宏进行宏展开时,不仅要对宏标识符作字符串替换,还必须作参数的替换。

// 定义一个带参数的宏,取得两个数中比较大的一个数
#define MAX( a, b ) ((a) > (b) ? (a) : (b))
// 使用宏取得 2 和 4 中较大的一个数
int nMax = MAX( 2, 4 );
当进行宏展开时,这个宏首先进行字符串的替换,这行代码变为:
int nMax = a > b ? a : b;
然后,使用宏的实际参数替换宏定义中的参数,这行代码最终成为:
int nMax = 2 > 4 ? 2 : 4;

带参数宏的展开过于灵活,稍有不慎很容易出错。所以,更多的时候,我们是采用 const 常变量或 inline 内联函数来代替宏,尽量减少宏的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值