1

浏览 MRI 的代码,发现这些#define我看不懂:

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

那些#defines有什么意义?他们似乎什么都不做...

此代码可在ruby/include/ruby/ruby.hruby​​ github repo 的文件中找到。

4

1 回答 1

0

s 可以在#define编译时使用#ifdef. (您不能在编译时测试枚举的存在。)

由于 C 预处理器不进行递归替换,因此将符号定义为自身实际上什么都不做;该符号被自己替换一次,然后正常传递给编译器。

于 2016-08-24T02:34:02.540 回答