大概你正在寻找C代码函数定义.我在寻找定义时通常会做的是在所有文件中搜索函数名称而不Rf_使用返回类型.例如,Rf_error我会搜索void error.在这种情况下,你很快就会得到(来自src/main/errors.c@758,对于R版本3.2.2):
void error(const char *format, ...)
{
char buf[BUFSIZE];
RCNTXT *c = R_GlobalContext;
va_list(ap);
va_start(ap, format);
Rvsnprintf(buf, min(BUFSIZE, R_WarnLength), format, ap);
va_end(ap);
/* This can be called before R_GlobalContext is defined, so... */
/* If profiling is on, this can be a CTXT_BUILTIN */
if (c && (c->callflag & CTXT_BUILTIN)) c = c->nextcontext;
errorcall(c ? c->call : R_NilValue, "%s", buf);
}
Run Code Online (Sandbox Code Playgroud)
Rf_warning 在同一文件的第262行定义.
请注意以下行src/include/R_ext/Error.h
#ifndef R_NO_REMAP
#define error Rf_error
#define warning Rf_warning
#endif
Run Code Online (Sandbox Code Playgroud)
R_NO_REMAP通常未定义,因此这意味着宏error扩展为Rf_error. 因此,在包含 的文件中Error.h, 的实例将被预处理器error替换。Rf_error
因此,您需要搜索具有相同返回类型和参数的函数。正如 BrodieG 在他的回答中指出的那样,这些函数通常(总是?)具有相同的名称,但没有前缀Rf_。
感谢邓肯·默多克的有用指点。任何错误都是我的。