[Rd] Calling C functions with value parameters
Simon Urbanek
simon.urbanek at r-project.org
Tue Aug 18 14:08:42 CEST 2009
Jeff,
On Aug 17, 2009, at 10:23 , Jeffrey J. Hallman wrote:
> One hassle I could do without is the necessity of writing C wrapper
> functions
> like this:
>
> void fameInit(int *status){
> cfmini(status);
> return;
> }
>
> when I want to call a library function (cfmini, in this case) that
> takes an
> int argument. The .C interface only lets me pass a pointer to an
> int, rather
> than the int itself.
>
> Is there any chanch that .C could be enhanced to allow passing
> arguments by value to the compiled code?
IMHO close to 0, because there is not such a thing as "scalar int" in
R. All objects in R are arrays (in C speak), so in all three:
foo(integer(0)), foo(1L), foo(1:10)
the argument is of the same type: integer vector (analogously C type
int[]). In fact .C should preferably not be used for wrappers like the
one you suggested, because it's more prone to errors and much less
flexible than .Call which gives you all you want including the control
over duplication and the length of the supplied arguments.
(There are some packages that can generate wrappers from function
arguments or header files - maybe the authors can comments on that if
they wish).
Cheers,
Simon
More information about the R-devel
mailing list