我正在阅读 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_
prefix 是一个常见的习惯用法,它使这个普通的 C 代码与命名空间相似。所以你要找protect(...)
反而:
/usr/share/R/include/Rinternals.h:#define protect Rf_protect
考虑到它的“核心”程度,您不妨从
src/main
开始哪里快grep -c
带您到 src/main/memory.c
.等等 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 - 我在哪里可以找到 Rf_protect() 在 R 的源代码中的定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569730/