什么是“#define XXX”的价值?

时间:2013-04-27 23:21:39

标签: c++ string

什么是“#define XXX”的价值?

它没有值,但似乎没有编译错误。通常定义是 定义类型替换,但它是定义类型wiouht replace str。

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:4)

通常会将XXX定义为行的其余部分

在这种情况下它是空的并不重要。

这里没有任何例外。

答案 2 :(得分: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这些测试都没有成功。