创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡><)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
c++系列专栏:C/C++零基础到精通给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
c语言内容:
专栏:c语言之路重点知识整合
【c语言】全部知识点总结
在C语言中曾介绍过宏定义的基本使用方法:
【c语言】详解宏定义#define 各种使用方法
本文将深入介绍宏替换的更高级用法
==================================================
宏替换一般这样使用:
#define N 100
在预处理期能将N
替换为100
,然后进行编译
宏替换可以传递参数
#define M(VALUE) int a = VALUE;
在使用宏时,可以将实参传递给宏定义中定义的形参,主函数使用方法如下:
M(3);
cout << a << endl;
定义一个乘法宏替换:
#define MUL(A,B) A*B
如果加上运算符,宏替换就不会做想象中的运算:
此时运算过程为 1 + 3 * 2 == 7,而不是1先+3再*2
函数参数只是替换的作用,不会像函数参数一样做表达式的运算
可以在宏定义中添加括号解决:
#define MUL(A,B) ((A)*(B))
宏替换中的运算符也不会运算:
只是单纯的替换,不会先1+2再*2,而是1 + 2 * 2 == 5
一般来说,宏替换只会替换当前行,如果想要替换多行代码,可以使用反斜杠/
实现:
在每行末尾添加反斜杠/
(一般最后一行不用),反斜杠/
的含义是用来连接当前行和下一行
#define TianXi(N) \
for (int i = 0; i < N; i++)\
{\
cout << i << " ";\
}cout << endl;
注意事项:反斜杠/的后面不能写任何东西(包括空格、注释等)
使用#undef可以限制宏替换的作用范围,在#undef的下面取消对某个宏的定义
使用#
可以将宏替换中的参数转换为字符串
#define Q(A) #A
Q(TianXi); // "TianXi"
#define W(A) #@A
W(!); // '!'
使用##
可以将宏替换和其他语句拼接
#define S(A) int a##A=1;
S(3); //int a3 = 1;
宏替换的优点:
宏替换的缺点:
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |