1

MRI のコードをブラウズすると、#define理解できない次の s が見つかりました。

#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
#define ROBJECT_EMBED ROBJECT_EMBED
enum {
    ROBJECT_EMBED_LEN_MAX = 3,
    ROBJECT_EMBED = RUBY_FL_USER1,

    ROBJECT_ENUM_END
};

それらのポイントは何#defineですか?彼らは何もしていないようです...

このコードはruby/include/ruby/ruby.h、ruby github リポジトリのファイルにあります。

4

1 に答える 1

0

を使用#defineすると、コンパイル時に定義の存在をテストできます#ifdef。(コンパイル時に列挙型の存在をテストすることはできません。)

C プリプロセッサは再帰的な置換を行わないため、シンボルをそれ自体として定義しても事実上何もしません。シンボルは一度それ自体に置き換えられ、通常どおりコンパイラに渡されます。

于 2016-08-24T02:34:02.540 に答える