C/C++宏的巧妙使用

宏的作用:

 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。

宏的优缺点:
优点:

 宏通常被应用于执行简单的运算,它比函数在程序的规模和速度方面更胜一筹,同时宏是与类型无关的。

缺点:

 1)每次使用宏时,宏代码都会被插入到程序中。除了非常小的宏之外,程序的长度会大幅度增长。
 2)宏是不方便调试的。
 3)宏是不能递归的 。
 4)宏可能会带来运算符优先级的问题,导致程容易出现错误

宏常用于:
1.转字符串

 注意当宏参数是另一个宏的时候,凡宏定义里有用’#’或’##’的地方宏参数是不会再展开, 需要加多一层中间转换宏才可以解决宏参数的转换。

例如:

#define _STR(x)    #x
#define STR(x)    _STR(x)
#define MAX    100

STR(MAX)   --------->  "100"

2.转字符
#define B(x) #@x
B(1)------> '1' ( #@x , #@ 符号会将宏的参数进行字符串字面量化,并且加‘’号)

3.粘黏符
#define A(x) T_##x
A(1)------> T_1 (T_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)


#define B(a,b) int(a##e##b)
B(2,3)------>2e3 输出:2000
4.比较大小

 注意多使用括号

#define MAX(x,y) ((x)>(y)?(x):(y))
5.多行定义
//分配内存
#define MALLOC(n, type) \
  ( (type *) malloc((n)* sizeof(type)))

//交换两个变量的值
#define swap(x,y,T) do { \
    T temp = (*x);\
    (*x) = (*y); \
    (*y) = temp; \
} while (0)

int a = 5;
int b = 9;
swap(&a,&b,int); //输出9,5
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅笑一斤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值