2014-09-04 94 views
1

我可以做這樣的事情的變量名:形成與宏觀

#define VERSION 4_1 

int32_t myVersion??VERSION; 

// What I expect here is that the variable should be generated with name myVersion4_1. 
// If possible what should be placed instead of ?? above? 

是否可以使用宏象上面在C++中形成的變量名?

回答

3

不完全是你如何嘗試,但你可以做什麼如下:

#define VAR_VERSIONED_NAME(name) name##4_1 

int32_t VAR_VERSIONED_NAME(myVersion) = 1; 
myVersion4_1 = 2; 

,或者如果VERSION必須是一個獨立的define

#define VERSION 4_1 

#define CAT_I(a, b) a ## b 
#define CAT(a, b) CAT_I(a, b) 
#define VAR_VERSIONED_NAME(name) CAT(name, VERSION) 

int VAR_VERSIONED_NAME(myVersion) = 1; 
myVersion4_1 = 2; 
+0

我只是想指出的是,雖然這使得代碼真正靈活,它很容易被濫用,從而導致無法遵循的代碼(你基本上不可能,除非你知道他們是宏觀搜索這些變量 - 生成) – Neowizard 2014-09-04 12:33:04

1

你需要的indirection水平,擴大VERSION然後才能粘貼它。

#define VERSION 4_1 

#define expand(v) paste(v) 
#define paste(v) myVersion ## v 

int main() 
{ 
    int expand(VERSION); 
    myVersion4_1 = 42; 
}