Здравствуйте.
Вопрос касается макросов
Мне бы хотелось сделать макрос, который формировал числовое представление строки. Причем, если 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);
Но тут даже невооруженным взглядом видна вся неказистость.
Есть идеи, как заставить выполнить сложение перед преобразованием в число?