我收到了cran对yaImpute包中ANN.cpp的clang编译发出的"严重警告",表明;
格式字符串不是字符串文字(可能不安全) [-WFormat-安全]
我已经追踪到这个C++代码块的警告,特别是对Rprintf(msg)
的两个调用.然而,在阅读关于这场战争的帖子时,我不清楚到底如何解决印刷中的安全问题.
void annError(const char *msg, ANNerr level)
{
if (level == ANNabort) {
//cerr << "ANN: ERROR------->" << msg << "<-------------ERROR\n";
Rprintf("ANN Fatal ERROR:");
Rprintf(msg);
// std::exit(1);
}
else {
//cerr << "ANN: WARNING----->" << msg << "<-------------WARNING\n";
Rprintf("ANN WARNING:");
Rprintf(msg);
}
}
我看到的建议是,使用__attribute__((__format__ (__printf__, 2, 0)))
是解决此问题的一种方法,但不确定如何修改代码块.诚然,我不是一名C++程序员,我在yaImpute包中继承了这段代码.如有任何建议,我们将不胜感激.