在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
#include <stdio.h>
#define ADD(A,B) printf(#A " + " #B " = %d\n",((A)+(B)))
#define XNAME(n) x ## n
#define PRINT_XN(n) printf("x" #n " = %d\n", x ## n)
int main(void)
{
ADD(4,5);
int XNAME(1) = 14;
PRINT_XN(1);
return 0;
}
再次学习一下后两个还定义的小技巧,在vscode中可以把鼠标放到代码中,可以看到宏定义展开的最终结果。这个编辑器,值得推荐,我主打用他来写代码的。 1、如果A是一个宏形参,那么#A就是转换为字符串"A"的形参名。这个过程称为字符串化(stringizing) 2、与#运算符类似,##运算符可用于类函数宏(带参宏)的替换部分。##运算符可以把两个记号组合成一个记号。
运行结果:
##运算符在这里看来并没有起到多大的便利,反而会让我们感觉到不习惯。但是,使用##运算符有时候是可以提高封装性及程序的可读性的。如跑实时操作系统的stm32程序中,关于gpio的硬件驱动中有如下代码:
假设这样使用该宏:
该宏将展开为:
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论