怎么实现这种参数先展开的宏定义?

[复制链接]
查看11 | 回复6 | 2021-1-27 05:27:05 | 显示全部楼层 |阅读模式
unsignedcharucT1;
unsignedcharucT2;
#definemT1AndT2(ucT1,ucT2)
#defineAnd(x,y)x&=y
main()
{
And(mT1AndT2);
}
//
如上,会报错,参数个数不匹配。怎样能让里面的宏定义先展开,而不报错呢?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:27:05 | 显示全部楼层
unsignedcharucT1;
unsignedcharucT2;
#definemT1AndT2(ucT1)&(ucT2)
直接这样就好了
回复

使用道具 举报

千问 | 2021-1-27 05:27:05 | 显示全部楼层
可能表达的不清楚。只是举了个简单的例子。
实际是有很多的要这样执行。
unsignedcharucT1;
unsignedcharucT2;
unsignedcharucT3;
unsignedcharucT4;
#definemT1AndT2(ucT1,ucT2)
#definemT1AndT3(ucT1,ucT3)
#definemT1AndT3(ucT1,ucT4)
#defineAnd(x,y)x&=y
#defineOr(x,y)x|=y
main()
{
And(mT1AndT2);
Or(mT1AndT2);
And(mT1AndT3);
}

回复

使用道具 举报

千问 | 2021-1-27 05:27:05 | 显示全部楼层
宏的展开顺序是从外向里的,和函数都调用的从里向外的顺序是反的
你这个想法不行

回复

使用道具 举报

千问 | 2021-1-27 05:27:05 | 显示全部楼层
在宏体中,如果宏参数前加个#,那么在宏体扩展的时候,宏参数会被扩展成字符串的形式。
回复

使用道具 举报

千问 | 2021-1-27 05:27:05 | 显示全部楼层

intucT1=2;
intucT2=6;
#definemT1AndT2ucT1,ucT2
#defineAnd(x,y)x&=y
#definewraperAnd(arg)(And(arg))
#include
usingnamespacestd;
intmain(){
cout
打包一下就可以了
回复

使用道具 举报

千问 | 2021-1-27 05:27:05 | 显示全部楼层
注意等价替换,括号也会替换进去。所以只有一个参数~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行