[Rd] winbuilder warning message wrt function pointers
Therneau, Terry M., Ph.D.
therneau at mayo.edu
Fri Dec 29 19:13:58 CET 2017
Bill,
That's a very nice solution. It is both cleaner looking and preferable to track R's .h
files.
However, some of my routines don't have void * as the return type (two are int *), and
Rdynload has
typedef void * (*DL_FUNC)();
Will this untruth mess anything up?
Terry T.
On 12/29/2017 10:52 AM, William Dunlap wrote:
> And remove the cast on the return value of R_GETCCallable. And check
> that your function is found before using it.
>
> #include <R.h>
> #include <Rinternals.h>
> #include <R_ext/Rdynload.h>
>
> void bdsmatrix_prod4(int nrow, int nblock, int *bsize,
> double *bmat, double *rmat,
> int nfrail, double *y) {
> DL_FUNC fun = NULL;
> if (fun==NULL) {
> fun = R_GetCCallable("bdsmatrix", "bdsmatrix_prod4");
> }
> if (fun==NULL) {
> Rf_error("Cannot find C function 'bdsmatrix_prod4' in library
> 'bdsmatrix.{so,dll}'");
> }
> fun(nrow, nblock, bsize, bmat, rmat, nfrail, y);
> }
>
>
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com <http://tibco.com>
>
> On Fri, Dec 29, 2017 at 8:48 AM, William Dunlap <wdunlap at tibco.com
> <mailto:wdunlap at tibco.com>> wrote:
>
> Try changing
> static void (*fun)() = NULL;
> to
> DL_FUNC fun = NULL;
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com <http://tibco.com>
>
> On Fri, Dec 29, 2017 at 5:14 AM, Therneau, Terry M., Ph.D. <therneau at mayo.edu
> <mailto:therneau at mayo.edu>> wrote:
>
> I've recently updated the coxme package, which calls internal routines from the
> bdsmatrix package. (It is in fact mentioned as an example of this in the
> Extensions manual.)
> The call connections are a blocks like this, one for each of the 9 called C
> routines.
>
> void bdsmatrix_prod4(int nrow, int nblock, int *bsize,
> double *bmat, double *rmat,
> int nfrail, double *y) {
> static void (*fun)() = NULL;
> if (fun==NULL)
> fun = (void (*)) R_GetCCallable("bdsmatrix", "bdsmatrix_prod4");
> fun(nrow, nblock, bsize, bmat, rmat, nfrail, y);
> }
>
> ..
>
> The winbuilder run is flagging all of these with
>
> bdsmatrix_stub.h:22:6: warning: ISO C forbids assignment between function
> pointer and 'void *' [-Wpedantic]
> fun = (void (*)) R_GetCCallable("bdsmatrix", "bdsmatrix_prod4");
>
> Ignore? Or should these lines have been written in a different way?
>
> Terry T.
>
> ______________________________________________
> R-devel at r-project.org <mailto:R-devel at r-project.org> mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> <https://stat.ethz.ch/mailman/listinfo/r-devel>
>
>
>
[[alternative HTML version deleted]]
More information about the R-devel
mailing list