4

「#define XXX」の値は何ですか?

値はありませんが、コンパイルエラーではないようです。通常、定義はdefine type replaceですが、strを置き換えないdefine typeです。

4

3 に答える 3

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
}
于 2013-04-27T23:23:04.173 に答える
4

通常どおり、行の残りの部分を定義XXXします。

この場合、空であっても問題ありません。

ここに例外はありません。

于 2013-04-27T23:27:42.343 に答える