When this macro is not defined, R headers do define macros with very generic names, such as Free
for S-PLUS back compatibility:
https://github.com/wch/r-source/blob/trunk/src/include/R_ext/RS.h#L70
#ifndef STRICT_R_HEADERS /* S-PLUS 3.x but not 5.x NULLs the pointer in the following */ #define Calloc(n, t) (t *) R_chk_calloc( (R_SIZE_T) (n), sizeof(t) ) #define Realloc(p,n,t) (t *) R_chk_realloc( (void *)(p), (R_SIZE_T)((n) * sizeof(t)) ) #define Free(p) (R_chk_free( (void *)(p) ), (p) = NULL) #endif
https://github.com/wch/r-source/blob/trunk/src/include/R_ext/RS.h#L49
#ifndef STRICT_R_HEADERS #define R_PROBLEM_BUFSIZE 4096 /* Parentheses added for FC4 with gcc4 and -D_FORTIFY_SOURCE=2 */ #define PROBLEM {char R_problem_buf[R_PROBLEM_BUFSIZE];(sprintf)(R_problem_buf, #define MESSAGE {char R_problem_buf[R_PROBLEM_BUFSIZE];(sprintf)(R_problem_buf, #define ERROR ),error(R_problem_buf);} #define RECOVER(x) ),error(R_problem_buf);} #define WARNING(x) ),warning(R_problem_buf);} #define LOCAL_EVALUATOR /**/ #define NULL_ENTRY /**/ #define WARN WARNING(NULL) #endif
And https://github.com/wch/r-source/blob/trunk/src/include/R_ext/Constants.h#L35
#ifndef STRICT_R_HEADERS #define PI M_PI #include <float.h> /* Defines the rest, at least in C99 */ #define SINGLE_EPS FLT_EPSILON #define SINGLE_BASE FLT_RADIX #define SINGLE_XMIN FLT_MIN #define SINGLE_XMAX FLT_MAX #define DOUBLE_DIGITS DBL_MANT_DIG #define DOUBLE_EPS DBL_EPSILON #define DOUBLE_XMAX DBL_MAX #define DOUBLE_XMIN DBL_MIN #endif
For example the Free
macro was making noise in arrow: romainfrancois/arrow@79c5001#diff-65a2f88d0196bb912b5ba669f5792492R20
So, should Rcpp have define STRICT_R_HEADERS
somewhere ?
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4