创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>楦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! c++系列专栏:C/C++零基础到精通 

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

c语言内容:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结

目录

一、传参数的宏替换二、宏替换不会做表达的运算三、宏替换多行—反斜杠连接四、#undef取消宏替换五、宏替换转字符串、拼接等用法六、宏替换的优缺点

在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可以限制宏替换的作用范围,在#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;

六、宏替换的优缺点

宏替换的优点:

便于维护,提高代码的可读性由于宏替换将代码片段在预处理期替换,可以提高程序的执行效率

宏替换的缺点:

没有安全类型的检查宏定义在部分代码中可能不直观,可能不方便调试宏替换不会运算求解

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。

大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。