我正在阅读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()的定义。
谢谢。
最佳答案
Rf_
前缀是一个常见的习惯用法,它使此普通C代码类似于 namespace 。因此,您想查找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 3081SEXP protect(SEXP s)
{
if (R_PPStackTop >= R_PPStackSize)
R_signal_protect_error();
R_PPStack[R_PPStackTop++] = CHK(s);
return s;
}
如此说来,您可能要关注大多数文件,而不仅仅是此功能。
关于r - 我在哪里可以找到R来源中Rf_protect()的定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31569730/