我想切片下面用frama-c显示的未使用的变量。但是我不知道应该使用哪个命令行来编写一个命令行
来切片所有未使用的变量countries <- c("CYM", "BMU")
mypath <- "C:/Desktop/" # please change this
for(i in countries){
download.file(paste0("http://biogeo.ucdavis.edu/data/gadm2.8/rds/",i,"_adm0.rds"),
destfile=paste0(mypath,i,"_adm0.rds"))
}
答案 0 :(得分:1)
如https://frama-c.com/slicing.html所述,切片始终是相对的一些标准,目标是生成一个比原始程序更小的程序,同时表现出与标准相同的行为。 Slicing插件本身提供了几种构建此类条件的方法,但似乎您对Sparecode插件(https://frama-c.com/sparecode.html)的结果感兴趣:这是切片的专用版本,其中标准是程序在分析的入口点结束时说明(即在您的案例中为main
)。换句话说,Sparecode将删除对分析中的代码的最终结果没有贡献的所有内容。在您的情况下,frama-c -sparecode-analysis hw.c
给出以下结果(请注意,对printf
的调用已被Variadic插件修改,并且其参数不被认为对main的最终状态有用。如果这是一个问题,您需要提供更专业的输出函数,ACSL规范表明它们对某些全局变量有影响)
/* Generated by Frama-C */
#include "stdio.h"
/*@ assigns \result, __fc_stdout->__fc_FILE_data;
assigns \result
\from (indirect: __fc_stdout->__fc_FILE_id),
__fc_stdout->__fc_FILE_data;
assigns __fc_stdout->__fc_FILE_data
\from (indirect: __fc_stdout->__fc_FILE_id),
__fc_stdout->__fc_FILE_data;
*/
int printf_va_1(void);
int main(void)
{
int __retres;
printf_va_1();
__retres = 0;
return __retres;
}
最后,请注意,在一般情况下,Slicing(因此Sparecode)会给出过多的过时性:它只会删除对它们确定它们对标准没有影响的语句。