Я пытаюсь привести в порядок подстановку (оценку) конкатенации макросов.Например:
#include <stdio.h>
#define FOO_ONE 12
#define FOO_TWO 34
#define BAR_ONE 56
#define BAR_TWO 78
#define MAKE_MAC(mac) // ... what to do here?
void main(int argc, char *argv[])
{
printf("FOO: " MAKE_MAC(FOO) "\n");
printf("BAR: " MAKE_MAC(BAR) "\n");
}
Результат, который я ищу:
FOO: 1234
BAR: 5678
Я пробовал несколько форм, думаю, что лучшая попытка заключается в следующем:
#define STRINGIFY(mac) #mac
#define CONCAT(mac1, mac2) STRINGIFY(mac1 ## mac2)
#define MAKE_MAC(mac) CONCAT(mac, _ONE) CONCAT(mac, _TWO)
Но это только уводит меня так далеко:
FOO: FOO_ONEFOO_TWO
BAR: BAR_ONEBAR_TWO
Итак, как я могу добавить дополнительный шаг оценки полученного каскадного макроса, прежде чем он будет преобразован в строку?