Что такое значение #define XXX?Что такое значение #define XXX?
он не имеет значения, но он, похоже, не компилирует ошибку. Обычно определение определяет тип replace, но определяет тип wiouht replace str.
Что такое значение #define XXX?Что такое значение #define XXX?
он не имеет значения, но он, похоже, не компилирует ошибку. Обычно определение определяет тип replace, но определяет тип wiouht replace str.
Как было сказано другим, его определение пуст, то есть в большинстве контекстов его текст замены пуст. Однако, в постоянном выражении для #if
заявления, его значение равно 0:
#define XXX
#if XXX == 0
// yes, we get here
#elif
// no, we don't get here
#endif
То же самое название, которое не определяется вообще:
#if YYY == 0
// yes, we get here
#elif
// no, we don't get here
#endif
Разница между этими двумя в том, что последний не определен, а первое является:
#ifdef XXX
// yes, we get here
#endif
#if defined(XXX)
// yes, we get here
#endif
и YYY
ни один из этих тестов удается.
Это будет заменить текст замены ничем:
#define FOO
int FOO main() FOO
{
}
Кроме того, #ifdef FOO
удастся.
Пустые определяет могут быть весьма полезным, например, в этом (наивной) функциональной форме:
#ifndef NDEBUG
# include <cstdlib>
# define MakeSureThat(X) if (!(X)) { std::abort(); }
#else
# define MakeSureThat(X)
#endif
Использование:
void do_stuff(Foo * p)
{
MakeSureThat(p != nullptr); // won't generate any code if NDEBUG
}
Он будет определять XXX
к остальной части line, как обычно.
Не имеет значения, что в этом случае он пуст.
Здесь нет никаких исключений.
Нет никакой ценности. XXX просто считается * определенным * препроцессором после встречи с этим объявлением. –