У меня есть довольно общий код, который использует макросы препроцессора для добавления определенного префикса в другие макросы. Это очень упрощенный пример того, что происходит:
#define MY_VAR(x) prefix_##x
"prefix_" на самом деле определен в другом месте, поэтому он будет отличаться при каждом включении файла. Это работает хорошо, но теперь у меня есть код, который я хотел бы пропустить, если один из токенов не существует, но это не работает:
#if defined MY_VAR(hello)
Я хочу, чтобы это расширилось:
#ifdef prefix_hello
Но я не могу понять, как. Мне нужно использовать макрос MY_VAR () для расширения, поэтому я не могу просто жестко закодировать имя. (Это на самом деле для некоторого кода тестирования, один и тот же код каждый раз включается с разным префиксом для тестирования группы классов, и я хочу пропустить пару тестов для нескольких классов.)
Возможно ли это с препроцессором C ++?
Обновление:
Вот некоторый полускомпилируемый код, чтобы продемонстрировать проблему дальше: (чтобы не вдавливать его в комментарии ниже)
#define PREFIX hello
#define DO_COMBINE(p, x) p ## _ ## x
#define COMBINE(p, x) DO_COMBINE(p, x)
#define MY_VAR(x) COMBINE(PREFIX, x)
// MY_VAR(test) should evaluate to hello_test
#define hello_test "blah blah"
// This doesn't work
#ifdef MY_VAR(test)
printf("%s\n", MY_VAR(test));
#endif