2014-04-12 92 views
1

我需要一個宏TAG(N,C)這需要將參數NC生成表單TAG_ + F(N)+ g的令牌(C),其中f(1) = Af(2) = ABf(3) = ABCf(4) = ABCDg(0) = (empty string)g(1) = _FOOg(2) = _BAR宏映射整數字符串令牌

例子:

TAG(3,0) -> TAG_ABC 
TAG(2,1) -> TAG_AB_FOO 
TAG(4,2) -> TAG_ABCD_BAR 

什麼是做到這一點的最好方法是什麼?

+1

像這樣的事情? '#define TAG(N,C)TAG _ ## f(N)## g(C)' – naab

+0

@naab:'f(N)'看起來像什麼? – Danvil

回答

2

您可以使用以下方法:

#define f_1 A 
#define f_2 AB 
#define f_3 ABC 
#define f(N) f_##N 

#define g_0 /* Empty */ 
#define g_1 _FOO 
#define g_2 _BAR 
#define g(N) g_##N 

#define CONCAT3_(A, B, C) A ## B ## C 
#define CONCAT3(A, B, C) CONCAT3_(A, B, C) 
#define TAG(N, C) CONCAT3(TAG_, f(N), g(C)) 
+0

使用'CONCAT3'和'CONCAT3_'的目的是什麼? – Danvil

+1

這些「間接」允許一些替換,否則你獲得'TAG_f(N)g(C)' – Jarod42

+0

它的工作原理。謝謝! – Danvil