[Visual C++, preprocessor]

trobak

Можно ли в MSVS (скажем, 2005) сделать макрос, значение которого равно взятому в двойные кавычки значению некоторого другого макроса? И если да, то как?
#define MACROS1 46
#define MACROS2 //что тут написать, чтобы получилось "46"
вместо этого интересно было бы узнать ответ хотя бы на один из вопросов
1) можно ли (если да, то как) определить макрос, значение которого равно одной двойной кавычке?
2) как препроцессор заставить "вычислять" аргумент макроса, до того, как его подставить. Точнее, хотелось бы написать что-то вроде
#define QUOTED(x) #x
#define MACROS2 QUOTED( MACROS1) //сейчас это "MACROS1" вместо желаемого "46"

pav7

препроцессор - зло
за исключением единичных случаев

Dasar

#define QUOTED2(x) #x
#define QUOTED(x) QUOTED2(x)
std::cout << QUOTED(MACROS1) << std::endl;

trobak

ясное дело, зло
но, увы, в этом мире зло существует...
этот закавыченный макрос хочется передать в ресурс, который бы определял номер версии
сейчас это задачка, скорее чисто академическая, вместо
#define BUILD_VERSION 46
#define FULL_VERSION_TEXT "7.02.46"
хочется иметь
#define BUILD_VERSION 46
#define BUILD_VERSION_TEXT //? что-тут написать
#define FULL_VERSION "7.02."BUILD_VERSION_TEXT
Конечно, два раза написать руками "46" - руки не отвалятся, но неприятное ощущение "дублирования кода" остается.
К тому же, проектов далеко не один, а исправлять номер билда в каждом по второму разу уже можно и забыть.

pitrik2

## - не поможет?

Maurog

#define FULL_VERSION "7.02."##BUILD_VERSION_TEXT
?

trobak

большое спасибо
Оставить комментарий
Имя или ник:
Комментарий: