[R-pkg-devel] Error checking in an independent C code and printing (perror, printf, etc.)

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Tue Sep 6 18:28:59 CEST 2022


On 05/09/2022 10:48 p.m., Jiří Moravec wrote:
> Hello,
> 
> this is my first time writing C code that interacts with R.
> To make my C code more modular, reusable, and easier to test with
> unittests, I split my code into:
> 
> a) code that does stuff
> b) code that interfaces between a) and R.
> 
> Only the b) imports the R headers, a) is completely independent of R
> (and potentially shared between different projects).
> 
> That brings me to a problem: How to do error handling in C without the
> use of various C-specific print functions R-specific print functions?
> 
> The C-specific print functions raise a CRAN note:
> 
> Compiled code should not call entry points which might terminate R nor
> write to stdout/stderr instead of to the console, nor use Fortran I/O
> nor system RNGs
> 
> But R(C) print functions cannot be used without importing particular
> header,
> which would induce otherwise another dependency, and tie it closely with R.

I think the best way is to think of error reporting as part of the 
interface.  Your code that does stuff shouldn't try to print anything, 
it should just return special error code values to indicate problems. 
The code in b) looks for those error codes and creates R messages or 
errors.  If you use the a) code in a different project, it would do the 
same, but report the errors in whatever way is natural in that context.

> 
> This is my first time writing into mailing list, hopefully I am doing
> everything ok.

Looks fine to me!

Duncan Murdoch



More information about the R-package-devel mailing list