我试图将宏连接的替换(求值)字符串化。例如:
#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
那么,在结果连接的宏被串化之前,如何添加对它的额外计算步骤呢?