Variable args length and rb_class_new_instance

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 ???

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 “&” ???

Yvon

On 8/21/07, unbewusst [email protected] wrote:

1875 }

return rb_class_new_instance( 2, args, rb_path2class( “RFile” ) );

Blessings,
TwP

unbewusst wrote:

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];

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 **”.

On 21 août, 19:19, Nobuyoshi N. [email protected] wrote:

Nobu Nakada
ok thanks to all of you, i’ve found it bu myself

Yvon

Hi,

At Wed, 22 Aug 2007 01:29:57 +0900,
Tim H. wrote in [ruby-talk:265676]:

&args is then a pointer to a pointer to a VALUE, or “VALUE **”.

VALUE (*)[2] which is different from VALUE **.