Что делает #define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX?
Просматривая код МРТ, я нашел эти #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
};
Какой смысл этих #define
s? Кажется, они ничего не делают...
Этот код находится в ruby/include/ruby/ruby.h
файл в рубиновом репозитории github.
1 ответ
#define
позволяют проверить наличие определения во время компиляции, используя #ifdef
, (Вы не можете проверить наличие перечисления во время компиляции.)
Поскольку препроцессор C не выполняет рекурсивное замещение, определение символа как самого себя фактически ничего не делает; символ заменяется один раз на себя, а затем обычно передается компилятору.