C++ 入门篇(六) 宏

文章介绍了宏的概念,作为编译前的文本替换机制,用于提高代码可读性和效率。同时,文章提到了宏的缺点,包括调试困难、代码膨胀和边界效应,并指出C++中常使用const、enum和内联函数作为宏的替代技术。
摘要由CSDN通过智能技术生成

目录

一、概念

二、宏函数

三、宏的优缺点?

四、C++有哪些技术替代宏?

【总结】 

【源代码】


一、概念

1.宏是什么?

        一种替换机制,编译程序前会对代码中的文本做出替换。
         宏是一种替换机制。它根据一系列预定义的规则替换一定的文本模式解释器编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。


2.为什么要有宏?

        提高代码可读性,宏函数还可以提高效率。


3.怎么使用宏?

        用#define定义宏。


二、宏函数

eg. 求和宏函数
#define ADD(a, b) ((a) + (b))

要检查宏函数写的是否正确也很简单,就是看能不能在调用宏函数的代码中直接替换。
如最常见的错误在宏函数末尾加上了分号,这时我们将代码替换,这局代码中就会出现两个分号。

eg. 将宏函数带入代码中检查


三、宏的优缺点?

1.优点
        a. 提高代码的可读性,方便修改。
        b. 宏函数还可以提高效率

2.缺点
        a. 不方便调试:因为宏是在预编译阶段进行替换的,一些由宏导致的问题在调试时难以被发现。
        b. 可能会引起代码的膨胀:宏的展开可能会导致代码的膨胀,从而增加程序的内存消耗。
        c. 可能会增加编译时间:由于宏的展开是在编译时进行的,因此可能会增加编译时间。
        d. 边界效应:由于宏定义的时候,其各个分量未加括号,而在使用宏定义的时候,传递的参数是变量的表达式,然后经过系统展开后,由于优先级的原因,导致其结果不是你所希望的。

四、C++有哪些技术替代宏

1. 常量的宏定义 用 const、enum来代替

2. 宏函数 用 内联函数(inline)来代替


【总结】 


【源代码】

//宏函数
#include<bits/stdc++.h>
#define Add(a, b) ((a) + (b))
//错误一:加了参数类型
//#define Add(int a, int b) ((a) + (b))
//错误二:中间有加号
//#define Add(a + b) ((a) + (b))
//错误三:没有加括号
//#define Add(a, b) a+b
//错误四:末尾加分号
//#define Add(a, b) ((a) + (b));

//要时刻记住宏函数的作用是替换,用后面的字符串替换源代码
//要检查宏函数的定义是否正确也很简单,直接把后面的字符串替换回代码中即可
int main()
{
	int a = Add(2, 3); // ((2) + (3))
	int b = Add(2, 3) * 3; // ((2) + (3))*3
	int c = Add(Add(2, 4), 3); // ((((2) + (3))) + (3))
    return 0;
}

------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烛火萤辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值