1

我正在尝试在这里为 R 创建一个小扩展,以便在 R 提示符上嵌入当前时间:https ://github.com/musically-ut/extPrompt

事情似乎总体上正常,但R CMD check .提出了警告:

文件'[截断]..Rcheck/extPrompt/libs/extPrompt.so':发现对 R 的非 API 调用:'ptr_R_ReadConsole'</p>

编译后的代码不应调用 R 中的非 API 入口点。

相关文件是这样的:https ://github.com/musically-ut/extPrompt/blob/master/src/extPrompt.c ,我认为出现在第 38 行。

void extPrompt() {
    // Initialize the plugin by replacing the R_ReadConsole function

    old_R_ReadConsole = ptr_R_ReadConsole;
    ptr_R_ReadConsole = extPrompt_ReadConsole;

    // ...
}

int extPrompt_ReadConsole(const char *old_prompt, unsigned char *buf, int len,
         int addtohistory) {

    // ...

    // Call the old function with the `new_prompt`
    return (*old_R_ReadConsole)(new_prompt, buf, len, addtohistory);
}

我正在尝试进行R_ReadConsoleAPI 调用。但是,由于一个不同的插件(比如我的)可能已经覆盖了它,我不想直接调用R_ReadConsole,而是之前在ptr_R_ReadConsole.

这是对 API 的错误使用吗?

4

1 回答 1

0

r-devel 邮件列表

至于错误地使用 API - 是的。由于 R CMD check 告诉您这是一个问题,因此它正式是一个问题。如果该软件包适用于您和它的任何用户,并且该软件包不托管在 CRAN 上,则这无关紧要。但是,在您的代码中使用此符号可能无法在所有平台上使用,并且不保证将来可以使用(但可能会!)。

于 2015-01-19T11:43:50.073 回答