Приглушить Stringizing Operator (#)
От: ABar Украина  
Дата: 17.01.08 20:11
Оценка:
Здравствуйте.
Вопрос касается макросов

Мне бы хотелось сделать макрос, который формировал числовое представление строки. Причем, если CONDITION 1, то получившееся число чётное, если 0, то получившееся число нечётное. CUR_VER_BASE гарантированно инкрементируется на 2. Делать это хочу в макросах, т.к. это нужно для формирования VersionInfo.

Набросал макрос.

#define CONDITION 0
#define CUR_VER_BASE 50
#if CONDITION
#define CUR_VER CUR_VER_BASE
#else
#define CUR_VER CUR_VER_BASE+1
#endif

#define _STR(i) #i
#define STR(i)  _STR(i)

#define STR_CUR_VER STR(CUR_VER)

printf(STR_CUR_VER);


Но (как и следовало ожидать) при CONDITION 0 я получаю "50+1", а хотелось бы "50", при CONDITION 1 — получаю "50".
Есть ли способ на уровне макросов добиться строки "51"?

Ко мне пришла идея сделать вот так:

#define CONDITION 0
#define CUR_VER_BASE 50
#if CONDITION
#define CUR_VER CUR_VER_BASE
#else

#if CUR_VER_BASE == 0
#define CUR_VER 1
#elif CUR_VER_BASE == 1
#define CUR_VER 2
//...
#elif CUR_VER_BASE == 50
#define CUR_VER 51
//...
#endif
#endif//CONDITION

#define _STR(i) #i
#define STR(i)  _STR(i)

#define STR_CUR_VER STR(CUR_VER)

printf(STR_CUR_VER);


Но тут даже невооруженным взглядом видна вся неказистость.
Есть идеи, как заставить выполнить сложение перед преобразованием в число?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.