From: Tim Hunter Date: 2007-08-22T01:29:57+09:00 Subject: Re: [C ext to Ruby] variable args length and rb_class_new_instance unbewusst wrote: > i did a first try calling rb_class_new_instance with variable args > length : > > rosxutils.c: In function m_rfile_wo: > rosxutils.c:1870: error: parse error before [ token > > 1867 VALUE m_rfile_wo ( VALUE self, VALUE file, VALUE options ) > 1868 { > 1869 char *cfile = StringValuePtr ( file ); > 1870 VALUE[2] args; > 1871 //VALUE args[2]; > 1872 args[0] = file; > 1873 args[1] = options; > 1874 return rb_class_new_instance ( 2, &args, rb_path2class > ( "RFile" ) ); > 1875 } > > HERE i don't see where is the parse error ??? "VALUE[2] args;" is not valid C. You need to use VALUE args[2]; > > > rosxutils.c: In function m_rfile_wo: > rosxutils.c:1874: warning: passing argument 2 of rb_class_new_instance > from incompatible pointer type > > 1867 VALUE m_rfile_wo ( VALUE self, VALUE file, VALUE options ) > 1868 { > 1869 char *cfile = StringValuePtr ( file ); > 1870 //VALUE [2] args; > 1871 VALUE args[2]; > 1872 args[0] = file; > 1873 args[1] = options; > 1874 return rb_class_new_instance ( 2, &args, rb_path2class > ( "RFile" ) ); > 1875 } > > AND HERE why the pointer is incompatible, because of the "&" ??? Yes. In this context, "args" is a pointer to a VALUE, or "VALUE *". &args is then a pointer to a pointer to a VALUE, or "VALUE **". > > Yvon >