2013-04-27 3 views
4

Что такое значение #define XXX?Что такое значение #define XXX?

он не имеет значения, но он, похоже, не компилирует ошибку. Обычно определение определяет тип replace, но определяет тип wiouht replace str.

+2

Нет никакой ценности. XXX просто считается * определенным * препроцессором после встречи с этим объявлением. –

ответ

3

Как было сказано другим, его определение пуст, то есть в большинстве контекстов его текст замены пуст. Однако, в постоянном выражении для #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 ни один из этих тестов удается.

11

Это будет заменить текст замены ничем:

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

Он будет определять XXX к остальной части line, как обычно.

Не имеет значения, что в этом случае он пуст.

Здесь нет никаких исключений.

Смежные вопросы