Нет, при определении макросов вы должны позаботиться об одном, что макрос не должен вызывать сам (рекурсивно) ни прямо, ни косвенно.
Я знаю, что две статические переменные, занимающие 8 байтов, будут для вас экспансивными.
У меня есть решение по этому поводу
#define FID_STRS2(x) #x
#define FID_STRE(x) FID_STRS2(x)
#define FID_DECL(n, v) static int FIDN_##n = v;static const char *FIDS_##n = FID_STRE(v)
Просто переименуйте их в рекурсивные