2016-06-25 20 views
0

我的代码是:如何链接c宏中的加号或减号?

#define CHECK(x) if((x)==100)printf("%s = 100\n",#x); 
#define C9(x) CHECK(x##9);CHECK(x##PLUS##9);CHECK(x##MINUS##9); 
#define PLUS + 
#define MINUS - 

int main(){ 
C9(123-45-67+8); 
return 0; 
} 

宏扩展到这个(我补充一些\ n使代码可读性):

int main(){ 
if((123-45-67+89)==100)printf("%s = 100\n","123-45-67+89");; 
if((123-45-67+8PLUS9)==100)printf("%s = 100\n","123-45-67+8PLUS9");; 
if((123-45-67+8MINUS9)==100)printf("%s = 100\n","123-45-67+8MINUS9");;; 
return 0; 
} 

,预计扩大到这一点:

int main(){ 
if((123-45-67+89)==100)printf("%s = 100\n","123-45-67+89");; 
if((123-45-67+8+9)==100)printf("%s = 100\n","123-45-67+8+9");; 
if((123-45-67+8-9)==100)printf("%s = 100\n","123-45-67+8-9");;; 
return 0; 
} 

如何做到这一点? 感谢

+0

为什么第二,如果有两个分号';'和第三一个有三个? – Mike

+0

因为我在每个宏中添加了分号';'.. – zh19970205

+0

您是否曾经将PLUS更改为其他操作符? (这是一个非常非常糟糕的主意!)如果没有,为什么不使用这些符号,而是对代码进行混淆? – Olaf

回答

0

哦,我这么糊弄

此代码的工作

#define C9(x) CHECK(x##9);CHECK(x+9);CHECK(x-9); 

很容易= _ =

1

首先,你应该使用之前定义​​和MINUS。其次,我想你不希望使用##周围​​和MINUS像这样:

#define CHECK(x) if((x)==100)printf("%s = 100\n",#x); 
#define PLUS + 
#define MINUS - 
#define C9(x) CHECK(x##9);CHECK(x PLUS 9);CHECK(x MINUS 9); 

int main(){ 
C9(123-45-67+8); 
return 0; 
}