返回信息流我们提供个库函数,用户可以这么用: spec_mod(); 或者 spec_mod(n); (n=1,2,3,...)
本来呢,用函数就行了:
void spec_mod(int n=1)
{
if(n<=1) ...
else ...
}
但是因为我们流程的问题,现在只能用宏:
#define spec_mod(X) { if(X<=1)... else ... }
但是spec_mod() 会变成 if(<=1) ...(语法错),再定义一个spec_mod()宏也不行。
这是一条镜像帖。来源:北邮人论坛 / cpp / #47771同步于 2010/12/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问个#define 宏的问题,急啊!!!
lmy2008
2010/12/14镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
spec_mod()不带参数,那么n是不是只能全局了,否则怎么知道n是多少?
这样是可以的:
int n=0;
#define spec_add()(n<=1?n++:n)
没读懂楼主所说的。。。
函数spec_mod()可以不带参数,又可以带参数。。。这个函数怎么实现的?。。。valist能这样用了?不懂了。。。
另楼主所说的:“但是因为我们流程的问题,现在只能用宏:
#define spec_mod(X) { if(X<=1)... else ... } ”
这个一般应该写成一个do{} while(FALSE)循环比较好,否则用户这样调用函数spec_mod();,宏扩展后变成了};,这也是个错误。
#define spec_mod(X) do{ if(X<=1) cout<<"X<=1";else cout<<"X>1";}while(0)类似的~
好像楼主的问题是在
"但是spec_mod() 会变成 if(<=1) ...(语法错),再定义一个spec_mod()宏也不行。"
这吧,
定义宏感觉就是为了统一一个借口,调用方式一致,自己定一个n的特殊值做默认形参函数内处理不行吗
【 在 zxsword 的大作中提到: 】
: 没读懂楼主所说的。。。
: 函数spec_mod()可以不带参数,又可以带参数。。。这个函数怎么实现的?。。。valist能这样用了?不懂了。。。
: 另楼主所说的:“但是因为我们流程的问题,现在只能用宏:
: ...................
我想到了一个比较tricky的做法:
#define ConCat(x,y) x##y
#define spec_mod(X) do { int n=ConCat(X,1); int m=(n-1)/10; if (m<=1) ... else ...} while(0)
当出现spec_mod()时,m为0,正好满足了if的条件