Если проверка во время выполнения в порядке, то вы можете проверить длину строки:
#define REAL_STRINGIZE(x) #x
#define STRINGIZE(x) REAL_STRINGIZE(x)
if (STRINGIZE(funcprototype)[0] == '\0') {
// funcprototype expanded to an empty replacement list
}
else {
// funcprototype expanded to a non-empty replacement list
}
Я не думаю, что существует общий случай ", если этот макрос заменен напустая последовательность токенов "проверка времени компиляции.Это проблема, аналогичная «возможно ли сравнить две последовательности токенов на равенство», что невозможно сделать во время компиляции.