c++ #define宏

编译四阶段:预处理、编译、汇编、链接

 使用关键字define 定义 叫宏

#define PI 3.14  (宏定义)

 在预处理结果 使用3.14替换所有出现PI的位置(宏展开)

注意:不要在宏后面加分号

#define PI 3.14                                            

if(PI>3.0)                                                                                                                    

{

        语句;

}

 如果在宏后面加分号,例如:

  #define PI 3.14;

  if(PI>3.0)   

  PI就会被替换为3.14;  

宏尽量大写和普通变量区分开

不带参数的宏

#define PI 3.14     (宏定义)

#define MY_STR  "hello world"

#define N 100

宏的作用范围:是从定义出开始 到 当前文件结束 都有效

#undef可以结束宏的作用域

宏 没有作用域的限制 只有当前源文件 有效

带参数的宏(宏函数)

#define MY_MUL(a,b)     a*b

cout << MY_MUL(10,20);//10*20

1、宏的参数不能有类型

#define MY_NUL(int a, int b)  a*b  //error

2、宏不能保证参数的完整性

#define MY_NUL(a,b) a*b

cout<<MY_NUL(10,20);                //10*20

cout<<MY_MUL(10+10,20+20);    //10 + 10*20 +20 == 230

MY_NUL(10 + 10, 20 + 20)的结果是230 而不是800

可以使用()的形式 让带参数的宏 具备一定完整性

#define MY_MUL(a, b)  a*b

#define MY_NUL(a, b) ((a) * (b))

cout<< MY_MUL(10,20);                        //10*20

cout<< MY_MUL(10 +10, 20 + 20);        //10 + 10*20 + 20 == 230

cout<< MY_MUL(10 + 10, 20 +20);        //((10 + 10)) * ((20 + 20)) == 800

3、宏不能作为结构体 类的成员

4、案例

#define  MY_MUL(a,b) a*b

#define  MY_MUL2(a,b) ((a)*(b))

cout<< MY_MUL( MY_MUL2(10+10,20+20), MY_MUL(10+10, 20+20));//8220

先要替换MY_MUL2(10+10,20+20)  *  MY_MUL(10+10, 20+20)

(10+10)* (20+20)*  10+10*20+20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值