Здравствуйте, ABar, Вы писали:
AB>Здравствуйте.
AB>Вопрос касается макросов
AB>Мне бы хотелось сделать макрос, который формировал числовое представление строки. Причем, если CONDITION 1, то получившееся число чётное, если 0, то получившееся число нечётное. CUR_VER_BASE гарантированно инкрементируется на 2. Делать это хочу в макросах, т.к. это нужно для формирования VersionInfo.
(skip)
Вариант 1:
Не совсем то что ты ищешь, но этот вариант кажется предпочтительным, поскольку очень простой:
#define CONDITION 0
#define CUR_VER_BASE 50
#if CONDITION
#define CUR_VER_SUFIX 0
#else
#define CUR_VER_SUFIX 1
#endif
#define CUR_VER (CUR_VER_BASE*10+CUR_VER_SUFIX)
#define STR_CUR_VER STR(CUR_VER_BASE) STR(CUR_VER_SUFIX)
Вариант 2:
#if (CUR_VER/1000)%10 == 0
# define CUR_VER_DIGIT_1 0
#elif (CUR_VER/1000)%10 == 1
# define CUR_VER_DIGIT_1 1
#elif (CUR_VER/1000)%10 == 2
# define CUR_VER_DIGIT_1 2
#elif (CUR_VER/1000)%10 == 3
# define CUR_VER_DIGIT_1 3
#elif (CUR_VER/1000)%10 == 4
# define CUR_VER_DIGIT_1 4
#elif (CUR_VER/1000)%10 == 5
# define CUR_VER_DIGIT_1 5
#elif (CUR_VER/1000)%10 == 6
# define CUR_VER_DIGIT_1 6
#elif (CUR_VER/1000)%10 == 7
# define CUR_VER_DIGIT_1 7
#elif (CUR_VER/1000)%10 == 8
# define CUR_VER_DIGIT_1 8
#elif (CUR_VER/1000)%10 == 9
# define CUR_VER_DIGIT_1 9
#endif
#if (CUR_VER/100 )%10 == 0
# define CUR_VER_DIGIT_2 0
#elif (CUR_VER/100 )%10 == 1
# define CUR_VER_DIGIT_2 1
#elif (CUR_VER/100 )%10 == 2
# define CUR_VER_DIGIT_2 2
#elif (CUR_VER/100 )%10 == 3
# define CUR_VER_DIGIT_2 3
#elif (CUR_VER/100 )%10 == 4
# define CUR_VER_DIGIT_2 4
#elif (CUR_VER/100 )%10 == 5
# define CUR_VER_DIGIT_2 5
#elif (CUR_VER/100 )%10 == 6
# define CUR_VER_DIGIT_2 6
#elif (CUR_VER/100 )%10 == 7
# define CUR_VER_DIGIT_2 7
#elif (CUR_VER/100 )%10 == 8
# define CUR_VER_DIGIT_2 8
#elif (CUR_VER/100 )%10 == 9
# define CUR_VER_DIGIT_2 9
#endif
#if (CUR_VER/10 )%10 == 0
# define CUR_VER_DIGIT_3 0
#elif (CUR_VER/10 )%10 == 1
# define CUR_VER_DIGIT_3 1
#elif (CUR_VER/10 )%10 == 2
# define CUR_VER_DIGIT_3 2
#elif (CUR_VER/10 )%10 == 3
# define CUR_VER_DIGIT_3 3
#elif (CUR_VER/10 )%10 == 4
# define CUR_VER_DIGIT_3 4
#elif (CUR_VER/10 )%10 == 5
# define CUR_VER_DIGIT_3 5
#elif (CUR_VER/10 )%10 == 6
# define CUR_VER_DIGIT_3 6
#elif (CUR_VER/10 )%10 == 7
# define CUR_VER_DIGIT_3 7
#elif (CUR_VER/10 )%10 == 8
# define CUR_VER_DIGIT_3 8
#elif (CUR_VER/10 )%10 == 9
# define CUR_VER_DIGIT_3 9
#endif
#if (CUR_VER/1 )%10 == 0
# define CUR_VER_DIGIT_4 0
#elif (CUR_VER/1 )%10 == 1
# define CUR_VER_DIGIT_4 1
#elif (CUR_VER/1 )%10 == 2
# define CUR_VER_DIGIT_4 2
#elif (CUR_VER/1 )%10 == 3
# define CUR_VER_DIGIT_4 3
#elif (CUR_VER/1 )%10 == 4
# define CUR_VER_DIGIT_4 4
#elif (CUR_VER/1 )%10 == 5
# define CUR_VER_DIGIT_4 5
#elif (CUR_VER/1 )%10 == 6
# define CUR_VER_DIGIT_4 6
#elif (CUR_VER/1 )%10 == 7
# define CUR_VER_DIGIT_4 7
#elif (CUR_VER/1 )%10 == 8
# define CUR_VER_DIGIT_4 8
#elif (CUR_VER/1 )%10 == 9
# define CUR_VER_DIGIT_4 9
#endif
#define STR_CUR_VER STR(CUR_VER_DIGIT_1) STR(CUR_VER_DIGIT_2) STR(CUR_VER_DIGIT_3) STR(CUR_VER_DIGIT_4)