2014-09-04 2 views
1

Могу ли я сделать что-то вроде этого:Формирование имени переменной Macro

#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

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; 
} 
Смежные вопросы