我在哪里可以找到R来源中Rf_protect()的定义?

时间:2015-07-22 17:11:03

标签: r

我正在阅读R资源并尝试了解堆结构。我正在寻找PROTECT()的定义,但我已经建立了:

$ grep -rn "#define PROTECT(" *
src/include/Rinternals.h:642:#define PROTECT(s) Rf_protect(s)

然后

$ grep -rn "Rf_protect(" *
src/include/Rinternals.h:803:SEXP Rf_protect(SEXP);
src/include/Rinternals.h:1267:SEXP Rf_protect(SEXP);

但我没有找到Rf_protect()的定义。

感谢。

1 个答案:

答案 0 :(得分:7)

Rf_前缀是一种常见的习惯用法,它使这个普通的C代码具有命名空间的相似性。所以你想要寻找protect(...)

/usr/share/R/include/Rinternals.h:#define protect               Rf_protect

并考虑到核心'这样,您也可以从src/main开始,快速grep -c引导您src/main/memory.c。 Et voila on lines 3075 to 3081

SEXP protect(SEXP s)
{
    if (R_PPStackTop >= R_PPStackSize)
    R_signal_protect_error();
    R_PPStack[R_PPStackTop++] = CHK(s);
    return s;
}

现在说,您可能想要关注大部分文件,而不仅仅是这个函数。