> when call "boot_defclass("Object", 0)","rb_cClass" is not defined,why
> "rb_class_boot" can call "rb_cClass"?

Dear Curious Friend

I'm not a Ruby expert, nor do I know much about C. But since your 
curiosity infected me, I ventured into the Ruby source trying to figure 
this out. The following are my findings.

rb_cObject, rb_cModule, rb_cClass all get allocated in NEWOBJ as struct 
RClass.

NEWOBJ(obj, struct RClass);

In, OBJSETUP, they're cast to type struct RObject, and the structs 
member klass gets assigned rb_cClass, which is a VALUE pointer:

OBJSETUP(obj, klass, flags);

#define OBJSETUP(obj,c,t) do {\
 /*...*/
 RBASIC(obj)->klass = (c);\
 /*...*/
} while (0)

Here, rb_cClass gets assigned an RClass type like rb_cObject, and 
rb_cModule. But it will also have a klass member that still holds a 
pointer to the same struct, which rb_cClass pointed to before:
rb_cClass =  boot_defclass("Class",  rb_cModule);

As pointed out in the beginning, I'm not an expert on this, so the above 
might very well be incorrect or incomplete. I would very much appreciate 
it if someone with better insight could provide a more thorough 
explanation and elaborate on why rb_cClass is needed.

Regards
wisccal
-- 
Posted via http://www.ruby-forum.com/.