Допустим, у меня есть 2 набора значений для P_A, P_B, P_C, как показано ниже
#define X_P_A 2
#define X_P_B 3
#define X_P_C 4
#define Y_P_A 5
#define Y_P_B 6
#define Y_P_C 7
Существует 3 типа пользователей: - один раз, когда нужны только X-варианты, один раз - только Y-варианты, и один раз - оба.
например
#ifdef X
#define P_A X_P_A
#define P_B X_P_B
#define P_C X_P_C
#endif
#ifdef Y
#define P_A Y_P_A
#define P_B Y_P_B
#define P_C Y_P_C
#endif
Пользователи, которым нужны оба, примут решение во время выполнения и при необходимости вызовут X_P _ <> или Y_P _ <>.
Есть ли способ сделать его проще, чтобы мне не приходилось писать условные макросы для каждого поля
ifdef X
// do something magical does defines all P_<> to X_P_<>
#endif
Я знаю, это звучит глупо. Вы можете спросить, почему бы просто не использовать варианты X_P _ <> на X. Я просто пытаюсь понять, возможно ли это.
Я в порядке с изменением макроса, определенного.
Возможно ли что-то похожее на приведенный ниже код: (проблема с кодом ниже в том, что компиляция не удалась, потому что #if не разрешен в #define)
#define A 1
#define B 2
#define C 3
/* Not a correct #define macro */
#define X_P(x) \
#if(x == A) 2 \
#elif(x == B) 3 \
#elif(x == C) 4 \
#endif
#ifdef X
#define P(x) X_P(x)
#endif