Проверьте, является ли значение макроса C пустым - PullRequest
5 голосов
/ 26 ноября 2010

Мне нужно написать некоторый код, чтобы убедиться, что макрос определен, но пустой (без значений).Тест не обязательно должен быть во время компиляции.

Я пытаюсь написать:

#if (funcprototype == "")
MY_WARN("funcprototype is empty");
#endif

код не компилируется, поскольку funcprototype расширяется до пустого.

1 Ответ

5 голосов
/ 26 ноября 2010

Если проверка во время выполнения в порядке, то вы можете проверить длину строки:

#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
}

Я не думаю, что существует общий случай ", если этот макрос заменен напустая последовательность токенов "проверка времени компиляции.Это проблема, аналогичная «возможно ли сравнить две последовательности токенов на равенство», что невозможно сделать во время компиляции.

...