2016-06-25 10 views
0

mein Code:Wie verknüpfe Plus oder Minus in c Makro?

#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; 
} 

das Makro diese erweitern (ich einige \ n hinzufügen, um Code lesbar): auf diese

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; 
} 

Und es wird erwartet, erweitern:

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; 
} 

Wie geht das? Dank

+0

warum die zweite, wenn zwei Semikolons ';' und die dritte ein drei hat? – Mike

+0

, weil ich in jedem Makro Semikolons ';' hinzufüge. – zh19970205

+0

Werden Sie jemals 'PLUS' in einen anderen Operator ändern? (was eine sehr, sehr schlechte Idee ist!) Wenn nicht, warum nicht die Symbole verwenden, sondern den Code verschleiern? – Olaf

Antwort

0

Oh, ich bin so täuschen

dieser Code Arbeit

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

es einfach ist, = _ =

1

Erstens Sie PLUS und MINUS vor der Verwendung definieren sollte. zweitens denke ich Sie nicht wollen, ## um PLUS und MINUS wie so verwenden:

#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; 
} 
Verwandte Themen