Re: Приглушить Stringizing Operator (#)
От: Chorkov Россия  
Дата: 17.01.08 21:18
Оценка: 3 (1)
Здравствуйте, 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)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.