「#define XXX」の値は何ですか?
値はありませんが、コンパイルエラーではないようです。通常、定義はdefine type replaceですが、strを置き換えないdefine typeです。
置換テキストを何も置き換えません。
#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
します。
この場合、空であっても問題ありません。
ここに例外はありません。